2017-03-02 43 views
2

形式在我的TML我有形式衛生組織字段由區更新掛毯5.3.8提交包含區

簡體TML:

<form t:id="editUserForm" t:zone="editRefresh" t:type="form"> 

        <label>Search For User to Edit: </label> 
        <input type="text" id="editUser" /> 

     <t:any 
       t:id="addNew" 
       element="button" 
       t:mixins="observe" 
       event="click" 
       zone="editRefresh" 
       fields ="['editUser']" > 
       Edit Selected User 
     </t:any>   

       <t:zone t:id="editRefresh"> 

       ...Fields here updated 

       <input t:type="submit" t:id="editUserButton" value="Edit User" /> 

      </t:zone> 
     </form> 

的字段是沒有問題,但是在提交表單我當填充迎接:

Render queue error in SetupRender[app/Administration:editloginname]: Component app/Administration:editloginname must be enclosed by a Form component. 

在檢查日誌後端代碼仍然執行,然後引發此錯誤。

另外 - 有沒有辦法讓頁面刷新提交?我已經在表單標籤中指定了一個t:區域,這樣當t:any按鈕被按下時表單不會刷新,而當表單提交時區域會更新,我希望按照慣例工作。

作爲一種變通方法我注入的頁面形式是,改變

return editRefresh.getBody(); 

return adminPage; 

這可以作爲一個解決方法確定的,但不是我會考慮的理想選擇。

回答

3

如果不包含表單,則無法渲染表單域。這是因爲Tapestry在呈現其字段時在表單的隱藏輸入中存儲了一些內部狀態,並且如果將該字段與表單分開呈現,則最終會導致無效的表單狀態。

看到這個答案的可用選項:https://stackoverflow.com/a/27961175/2414933

至於在提交刷新頁面:你可以繼續使用你的解決方法,因爲它是完全有效的。如果您不想將組件與包含頁面耦合,則可以處理頁面級別的表單提交事件和return this;(請記住Tapestry events are bubbled)。

或者從表單組件中刪除t:zone屬性。沒有t:zone表單提交將不會使用AJAX。

+1

謝謝你的幫助。就t:zone而言,如果我刪除它,則會打開另一個屏幕將在t上刷新的問題:單擊填充字段的任何按鈕。 –