2015-01-05 38 views
1

我正在尝试用于Java的Wicket框架,并通过构建简单的登录应用程序开始。 有两个页面,分别是包含登录表单的login.java(和.html)以及仅显示登录页面中输入的登录名和密码的NextPage.java(和html)。 为了实现页面变量的传递,我使用了wicket提供的PageParameters类。为什么在类型PageParameters上使用containsKey()和getString()时会出现错误?

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); 

    } 

} 

然而,在代码中的错误,并The method containsKey(String) is undefined for the type PageParametersThe method getString(String) is undefined for the type PageParameters原本不存在,根据教程上网页以及apache.wicket.org中的文档,其中明确提到containsKey是PageParameters的继承方法。我一直在努力寻找一个解决方案几个小时,但还没有达到任何地方。 我是Java的新手,对Wicket绝对陌生。

注意:当我删除containsKey()getString()代码部分时,它会在单击提交后成功地将用户名和密码输出到系统控制台。

我使用Apache Wicket 6.18,jdk 1.7和Eclipse Juno IDE。

+1

http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/request/mapper/parameter/PageParameters.html:你在哪里看到一个方法containsKey()和一个方法getString()? –

+0

@JBNizet https://wicket.apache.org/apidocs/1.4/org/apache/wicket/PageParameters.html 方法摘要 - > 从类继承的java.util.HashMap - >的containsKey 也,HTTP ://www.mkyong.com/wicket/wicket-pageparameters-example/ 我相信这个人知道他在网上发布工作示例时他在干什么。 – bhatGautam

+1

查看URL:这是1.4版本的javadoc。你正在使用6.18。 –

回答

1

由于containsKey()getString()不再存在的检票6.x的文档中(他们中有1.4倍),因此getNamedKeys().contains()get()工作,应该是正确的方法,我猜。

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

//previous code... 

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

//next code.... 

积分用户JB Nizet输入和帮助我找到答案。

0

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

相关问题