gpt4 book ai didi

java - Tapestry 5.3.8 提交包含区域的表单

转载 作者:行者123 更新时间:2023-12-03 18:49:10 28 4
gpt4 key购买 nike

在我的 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 按钮时表单不会刷新并且区域会更新,但是当提交表单时我希望它像往常一样工作。

作为解决方法,我注入(inject)了表单所在的页面并进行了更改

return editRefresh.getBody();

return adminPage;

作为变通方法,这可以正常工作,但不是我认为的理想选择。

最佳答案

您不能在不包含表单的情况下呈现表单域。这是因为 Tapestry 在呈现其字段时将一些内部状态存储在表单的隐藏输入中,如果您将字段与表单分开呈现,您最终会得到无效的表单状态。

查看可用选项的答案:https://stackoverflow.com/a/27961175/2414933

至于在提交时刷新页面:您可以继续使用您的解决方法,因为它是完全有效的。如果您不想将组件与包含页面耦合,您可以在页面级别处理表单提交事件并返回它;(记住Tapestry events are bubbled)。

或者从表单组件中删除 t:zone 属性。没有 t:zone 表单提交将不会使用 AJAX。

关于java - Tapestry 5.3.8 提交包含区域的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42558026/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com