2017-03-02 48 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上刷新的问题:单击填充字段的任何按钮。 –