1

post メソッドを使用するフォームを持つログイン ページに問題があります。問題は、post パラメータがサーバーに null になることがありますが、null ではないことです。フォーム バリデータは、パラメータが入力されていないかのように動作します。以下にフォームコードを配置します。アイデアや直感はありますか?

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

wicket によって生成された 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>

注 : この問題は、毎回ではなく時々発生します。

4

2 に答える 2

0

onSubmit()FWIK、フォームコンポーネントは、フォームのメソッドが呼び出されるまで処理されません。私は通常、次の行に沿って何かを呼び出すことによって、このステップでデータを永続化します。

    @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を使用する必要があることは正しいです。

于 2012-10-22T15:09:24.753 に答える
0

フォームに属するモデルはどこにありますか? つまり、Wicket では、基本的に常にモデルを操作し、未加工の Post データにアクセスすることはありません。あなたの例のフォームには、モデルがまったく定義されていません。それはかなり奇妙です。モデルの使用をお勧めします。

たとえば、これは SignInForm です: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/

PropertyModel を使用してパラメーターを割り当てます。

セバスチャン

于 2012-10-22T10:19:04.147 に答える