Tapestry 5.3.8 提交包含区域的表单
Tapestry 5.3.8 Submit form containing zone
在我的 tml 中,我有一个字段由区域更新的表单
简体 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:zone ,因此当按下 t:any 按钮时表单不会刷新并且区域会更新,但是当提交表单时我希望它像往常一样工作。
作为解决方法,我注入了表单所在的页面并进行了更改
return editRefresh.getBody();
到
return adminPage;
作为一种变通方法,这可以正常工作,但我认为这不是理想的方法。
您无法在不包含表单的情况下呈现表单域。这是因为 Tapestry 在呈现其字段时将一些内部状态存储在表单的隐藏输入中,如果您将字段与表单分开呈现,您最终会得到无效的表单状态。
查看此答案以了解可用选项:
关于在提交时刷新页面:您可以继续使用您的解决方法,因为它是完全有效的。如果您不想将组件与包含页面耦合,您可以在页面级别处理表单提交事件和 return this;
(记住 Tapestry events are bubbled)。
或者从表单组件中删除 t:zone
属性。没有 t:zone
表单提交将不会使用 AJAX.
不知道我对你的问题的理解是否正确,但是如果你想将表单的某些元素放入区域,你可以这样做:
http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/select1
这个例子对我很有帮助,希望对你也有帮助。
在我的 tml 中,我有一个字段由区域更新的表单
简体 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:zone ,因此当按下 t:any 按钮时表单不会刷新并且区域会更新,但是当提交表单时我希望它像往常一样工作。
作为解决方法,我注入了表单所在的页面并进行了更改
return editRefresh.getBody();
到
return adminPage;
作为一种变通方法,这可以正常工作,但我认为这不是理想的方法。
您无法在不包含表单的情况下呈现表单域。这是因为 Tapestry 在呈现其字段时将一些内部状态存储在表单的隐藏输入中,如果您将字段与表单分开呈现,您最终会得到无效的表单状态。
查看此答案以了解可用选项:
关于在提交时刷新页面:您可以继续使用您的解决方法,因为它是完全有效的。如果您不想将组件与包含页面耦合,您可以在页面级别处理表单提交事件和 return this;
(记住 Tapestry events are bubbled)。
或者从表单组件中删除 t:zone
属性。没有 t:zone
表单提交将不会使用 AJAX.
不知道我对你的问题的理解是否正确,但是如果你想将表单的某些元素放入区域,你可以这样做:
http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/select1
这个例子对我很有帮助,希望对你也有帮助。