2012-11-29 120 views
1

很簡單,我點擊具有type="submit"的輸入,並且未提交表單。Apache Wicket - 未提交表格

我已經搜索了這個問題的解決方案,但他們說我應該檢查我是否有嵌套窗體,我不這樣做,我只使用一個窗體。他們還表示這可能是一些錯位的標籤,但我已經瀏覽了整個HTML並且標籤都很好。

我在HTML塊:

<div id="form-options-div" style="margin-top:10px;"> 
    <input class="btn btn-primary" type="submit" wicket:id="saveClientButton" id="save-client-button" /> 
    <input class="btn" type="button" id="close-client-button" wicket:id="closeClientButton"/> 
</div> 

我在Java代碼中使用AjaxButton代表saveClientButton。我想覆蓋onSubmit(AjaxRequestTarget, Form<?>)。我會後整個Java代碼,但我有一個記錄在方法的開始,看看它被稱爲:

logger.debug("ON SUBMIT");

所以它不是方法中。有趣的是,當我重寫表單onSubmit()方法而不是AjaxButton時,頁面實際上會重新加載。但僅此而已,onSubmit方法仍未被調用。

這是怎麼發生的?

編輯:

private Button saveClientBtn;

saveClientBtn = new AjaxButton(WICKET_ID_SAVE_CLIENT_BUTTON) { 

     @Override 
     public void onError() { 
      logger.debug("Error on submit..."); 
     } 

     @Override 
     protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
      //code.... 
     } 
}; 

請問closeClientButton與正常行爲干擾?我不知道,因爲按鈕類型是button,而不是submit

editClientForm = new Form<Client>(WICKET_ID_EDIT_CLIENT_FORM);

add(editClientForm);

editClientForm.add(saveClientBtn);

編輯2:

確定的,而不是使用AjaxButton,我決定重寫形式onSubmit()onError()。點擊按鈕時,我看到onError()被調用。現在我需要找到原因。

好的,我把一個FeedbackPanel。它給我下面的消息:

'[Page class = EditClientPage, id = 6, render count = 1]' is not a valid EditClientPage.

而且,錯誤出現4次,如:

'[Page class = EditClientPage, id = 6, render count = 1]' is not a valid EditClientPage.

'[Page class = EditClientPage, id = 6, render count = 1]' is not a valid EditClientPage.

'[Page class = EditClientPage, id = 6, render count = 1]' is not a valid EditClientPage.

'[Page class = EditClientPage, id = 6, render count = 1]' is not a valid EditClientPage.

這個錯誤的含義是什麼?

+1

你有沒有覆蓋按鈕上的onError()以查看你是否達到了它?順便說一句,Wicket通過用div代替內部窗體來處理嵌套窗體(這在HTML中是不允許的)。 – bert

+0

@bert我試着重寫並放置一個日誌...但它沒有被調用。此外我再次檢查,沒有嵌套的形式。我在這個問題上瘋了......我希望它不是愚蠢的,我只是看不到它。 –

+1

您是否添加了FeedbackPanel? – svenmeier

回答

1

確保你有一個表格標籤。

例如爲:

<html> 
    <body> 
    <form wicket:id="form"> 
     <div wicket:id="registration"> 
      Display the RegistrationInputPanel 
     </div> 
     <input type=」submit」 wicket:id="register" value="Register"/> 
    </form> 
</body> 
</html> 

和Java類:

public class RegistrationPage extends Page { 
    public RegistrationPage(IModel<Registration> regModel) { 
     Form<?> form = new Form("form"); 
     form.add(new RegistrationInputPanel("registration", regModel); 
     form.add(new SubmitButton("register") { 
      public void onSubmit() { 

      } 
     }); 
     add(form); 
    } 
} 
0

在我的情況,看來我是不是在窗體中設置了 「需要」 的價值。

這是通過添加「的onError」方法的表單對象(果然,onError的是被稱爲確定,你可以說「什麼」錯誤was

String responseTxt = wicketTester.getLastResponse().getDocument();

並通過它挖查找錯誤消息。

實際設置的值,在我的情況,是

FormTester formTester = wicketTester.newFormTester("formName"); 
formTester.setValue("requiredElementName", "value"); 

然後正如預期的那樣,方法開始在測試中被調用。