私は Java 用の Wicket フレームワークを試しており、単純なログイン アプリケーションを作成することから始めています。ログイン フォームを含む login.java (および .html) と、ログイン ページに入力されたログインとパスワードを表示するだけの NextPage.java (および html) の 2 つのページがあります。ページから変数を渡すために、wicket が提供する PageParameters クラスを利用しています。
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);
}
}
ただし、コードにエラーがあり、web のチュートリアルや apache.wicket.org のドキュメントによる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 を使用しています。