为什么在类型 PageParameters 上使用 containsKey() 和 getString() 时会出错?
Why is there an error when using containsKey() and getString() on type PageParameters?
我正在尝试使用 Java 的 Wicket 框架,并从构建一个简单的登录应用程序开始。
有两个页面,即包含登录表单的 login.java(和 .html)和仅显示在登录页面中输入的登录名和密码的 NextPage.java(和 html)。
为了实现从页面传递变量,我使用了 wicket 提供的 PageParameters class。
login.java:
package com.myassignment;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
public class login extends WebPage {
private Form form;
private TextField userIDField;
private PasswordTextField passwordField;
public login(){
userIDField = new TextField("user_id", new Model(""));
passwordField = new PasswordTextField("password", new Model(""));
userIDField.add(new TextValidator());
passwordField.add(new TextValidator());
userIDField.setRequired(true);
passwordField.setRequired(true);
Form form = new Form("login_form") {
@Override
protected void onSubmit() {
String USRNAME = login.this.getUsername();
String PWD = login.this.getPassword();
System.out.println("You entered USER_ID: "+ USRNAME +" and PASSWORD: " + PWD);
PageParameters para = new PageParameters();
para.add("username", USRNAME);
para.add("password", PWD);
setResponsePage(NextPage.class, para);
}
};
form.add(userIDField);
form.add(passwordField);
add(form);
}
protected String getUsername() {
return userIDField.getDefaultModelObjectAsString();
}
protected String getPassword() {
return passwordField.getModelObject();
}
}
NextPage.java:
package com.myassignment;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebPage;
public class NextPage extends WebPage {
private Label unameLabel;
private Label passwordLabel;
public NextPage(PageParameters para) {
System.out.println(para);
String uname = ""+para;
String password = ""+para;
if(para.containsKey("uname")){
uname = para.getString("uname");
}
unameLabel = new Label("username_label", uname);
passwordLabel = new Label("password_label", password);
add(unameLabel);
add(passwordLabel);
}
}
但是,根据网络上的教程以及 [=32= 中的文档,代码中存在不应该存在的错误 The method containsKey(String) is undefined for the type PageParameters
和 The method getString(String) is undefined for the type PageParameters
],其中明确提到 containsKey 作为 PageParameters 的继承方法。几个小时以来,我一直在努力寻找解决方案,但还没有到达任何地方。
我是 Java 新手,对 Wicket 绝对是新手。
注意:当我删除 containsKey()
和 getString()
代码部分时,它会在单击提交时成功地将用户名和密码打印到系统控制台。
我正在使用 Apache Wicket 6.18、jdk 1.7 和 Eclipse Juno IDE。
改用新的 API:PageParameters#get(String).
由于 containsKey()
和 getString()
不再出现在 Wicket 6.x 文档中(它们在 1.4x 中存在),因此 getNamedKeys().contains()
和 get()
有效,应该是正确的方法,我猜。
以下是错误部分的代码片段,现在:
//previous code...
if(para.getNamedKeys().contains("username"))
{
uname = para.get("username").toString();
}
//next code....
感谢用户 JB Nizet 的输入并帮助我找到答案。
我正在尝试使用 Java 的 Wicket 框架,并从构建一个简单的登录应用程序开始。 有两个页面,即包含登录表单的 login.java(和 .html)和仅显示在登录页面中输入的登录名和密码的 NextPage.java(和 html)。 为了实现从页面传递变量,我使用了 wicket 提供的 PageParameters class。
login.java:
package com.myassignment;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
public class login extends WebPage {
private Form form;
private TextField userIDField;
private PasswordTextField passwordField;
public login(){
userIDField = new TextField("user_id", new Model(""));
passwordField = new PasswordTextField("password", new Model(""));
userIDField.add(new TextValidator());
passwordField.add(new TextValidator());
userIDField.setRequired(true);
passwordField.setRequired(true);
Form form = new Form("login_form") {
@Override
protected void onSubmit() {
String USRNAME = login.this.getUsername();
String PWD = login.this.getPassword();
System.out.println("You entered USER_ID: "+ USRNAME +" and PASSWORD: " + PWD);
PageParameters para = new PageParameters();
para.add("username", USRNAME);
para.add("password", PWD);
setResponsePage(NextPage.class, para);
}
};
form.add(userIDField);
form.add(passwordField);
add(form);
}
protected String getUsername() {
return userIDField.getDefaultModelObjectAsString();
}
protected String getPassword() {
return passwordField.getModelObject();
}
}
NextPage.java:
package com.myassignment;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebPage;
public class NextPage extends WebPage {
private Label unameLabel;
private Label passwordLabel;
public NextPage(PageParameters para) {
System.out.println(para);
String uname = ""+para;
String password = ""+para;
if(para.containsKey("uname")){
uname = para.getString("uname");
}
unameLabel = new Label("username_label", uname);
passwordLabel = new Label("password_label", password);
add(unameLabel);
add(passwordLabel);
}
}
但是,根据网络上的教程以及 [=32= 中的文档,代码中存在不应该存在的错误 The method containsKey(String) is undefined for the type PageParameters
和 The method getString(String) is undefined for the type PageParameters
],其中明确提到 containsKey 作为 PageParameters 的继承方法。几个小时以来,我一直在努力寻找解决方案,但还没有到达任何地方。
我是 Java 新手,对 Wicket 绝对是新手。
注意:当我删除 containsKey()
和 getString()
代码部分时,它会在单击提交时成功地将用户名和密码打印到系统控制台。
我正在使用 Apache Wicket 6.18、jdk 1.7 和 Eclipse Juno IDE。
改用新的 API:PageParameters#get(String).
由于 containsKey()
和 getString()
不再出现在 Wicket 6.x 文档中(它们在 1.4x 中存在),因此 getNamedKeys().contains()
和 get()
有效,应该是正确的方法,我猜。
以下是错误部分的代码片段,现在:
//previous code...
if(para.getNamedKeys().contains("username"))
{
uname = para.get("username").toString();
}
//next code....
感谢用户 JB Nizet 的输入并帮助我找到答案。