1

私は 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 PageParametersThe 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 を使用しています。

4

2 に答える 2

2

containsKey()Wicket 6.x のドキュメントにはとgetString()が存在しなくなったため (1.4x には存在していました)、したがってとgetNamedKeys().contains()get()機能し、正しい方法であるはずです。

以下は、現在のエラー部分のコード フラグメントです。

//previous code...

    if(para.getNamedKeys().contains("username"))
    {
        uname = para.get("username").toString();
    }

//next code....

ユーザーのJB Nizetのおかげで、回答を得ることができました。

于 2015-01-06T09:12:59.077 に答える
0

代わりに新しい API を使用してください: PageParameters#get(String)。

于 2015-01-05T18:58:21.500 に答える