为什么在PageParameters类型上使用containsKey()和getString()时会出错?

时间:2015-01-05 11:29:01

标签: java eclipse eclipse-luna wicket-6

我正在试用Java的Wicket框架,并开始构建一个简单的登录应用程序。 有两个页面,即login.java(和.html),它包含登录表单,NextPage.java(和html),它只显示在登录页面中输入的登录名和密码。 为了实现从页面传递变量,我正在使用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);

    }

}

但是,根据网络上的教程以及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。

2 个答案:

答案 0 :(得分:1)

由于Wicket 6.x文档中不再出现containsKey()getString()(它们在1.4x中存在),因此getNamedKeys().contains()get()起作用,应该是正确的方法,我猜。

以下是错误部分的代码片段,现在:

//previous code...

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

//next code....

向用户JB Nizet致信输入并帮助我找到答案。

答案 1 :(得分:0)

改为使用新的API:PageParameters#get(String)。