2012-10-22 42 views
1

我们有一个问题在我们的登录页面有一个使用post方法的表单,问题是有时候post参数对于服务器来说是空的,但它们不为空。表单验证器的行为与参数没有输入一样。我把我的表单代码放在下面。你有任何想法或直觉?Wicket表单提交数据丢失

protected class LoginForm extends OurForm { 

    private static final long serialVersionUID = -5813819309808445973L; 

    public LoginForm(String id) { 
     super(id); 

     setDefaultModel(new CompoundPropertyModel<Map<Object , Object>>(iMap)); 
     TextField<String> userId=new TextField<String>("USERCODE" , String.class); 
     userId.setOutputMarkupId(true); 
     userId.setRequired(true); 
     add(userId); 

     PasswordTextField password = new PasswordTextField("USERPASSWORD"); 
     password.setOutputMarkupId(true); 
     password.setRequired(true); 
     add(password); 

     add(new SubmitLink("SUBMIT")); 
    } 

通过检票口生成的HTML形式的代码:

<form autocomplete="off" id="id2" method="post" action=";jsessionid=989511050F24C577A23CF7CC55BC9757.salacakEUPT?x=UYCQLoTt3sXylAFd5u7DPGpiOKN9Mx4oErlMwLtbLndItHXg9LDIrg"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="id2_hf_0" id="id2_hf_0" /></div> 
<table width="100%"> 
<tr><td colspan="3"><h2>&nbsp; </h2></td></tr> 
<tr><td width="10%">&nbsp;</td> 
<td width="80%"> 
<table width="100%"> 
<tr><td colspan="2" height="100">&nbsp;</td></tr> 
<tr> 
<td align="right" width="50%"><label class="label" >Kullanıcı Kodu</label></td> 
<td align="left" width="50%"><input type="text" value="" name="USERCODE" id="id3"/></td> 
</tr> 
<tr> 
<td align="right"><label class="label" >Şifre</label></td> 
<td align="left" ><input type="password" value="" name="USERPASSWORD" id="id4"/></td> 
</tr> 
<tr><td colspan="2" height="20">&nbsp;</td></tr> 
<tr><td colspan="2" align="center"><input type="submit" id="id5" onclick="var wcall=euptWicketSubmitFormById('id2', ';jsessionid=989511050F24C577A23CF7CC55BC9757.salacakEUPT?x=UYCQLoTt3sXylAFd5u7DPIvNsZm6zLH4Nn8IO6OcpRl09M**bsF1rsqDb-hhJWazVdFfqhn-IWmQiM30HCroAnex3YAslQLnMwTnZBT5fO6Cuav6A95RGA', 'SUBMIT' ,function() { }.bind(this),function() { }.bind(this), function() {return Wicket.$$(this)&amp;&amp;Wicket.$$('id2')}.bind(this));;; return false;" submitlink="true" value="Giriş"/></td></tr> 
<tr><td colspan="2" height="100">&nbsp;</td></tr> 
</table> 
</td> 
<td width="10%"></td></tr></table> 
</form> 

注:有时会出现此问题不是每次。

回答

0

FWIK,窗体组件没有得到处理,直到形式的onSubmit()方法被调用。我通常在这一步沿线的财产以后叫我坚持数据:

@Override 
    protected void onSubmit() { 
     Item item = (Item) getModelObject(); 
     dao.storeItem(item); 
     setResponsePage(page); 
    } 

我不熟悉SubmitLink("id"),所以我不能告诉你为什么不工作。只要您的OurForm类具有与org.apache.wicket.markup.html.form.Form相同的行为,上述方法应该可以工作。在调用onSubmit()方法之前,您的验证也不应检查组件输入。另外,seba是正确的,您应该在您的TextFields的构造函数中使用Model或PropertyModel。

0

模型属于表单在哪里?我的意思是在Wicket中你基本上总是和Models一起工作,你永远不会访问原始的Post数据。在您的示例窗体中根本没有定义模型。这很奇怪。我会建议使用模型。

例如,这是我们的SignInForm: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/

它指定使用PropertyModel的PARAMS。

塞巴斯蒂安

+0

我们在代码中使用compoundpropertymodel这行代码就是这样。 setDefaultModel(new CompoundPropertyModel >(iMap)); –

+0

我们所有的页面都使用这个模型,我们通过地图达到组件值 –

+0

你的代码片段并不显示你如何阅读表单处理的结果。 –