我有一个请求范围的bean,它填充了表单中的各种属性。然后,这些属性用于更新另一个视图范围的bean。现在,我希望为用户提供重置表单的可能性,使所有表单字段都保存第一次加载页面时的值。这些值是通过bean本身定义的:
@ManagedBean
@RequestScoped
public class ItemSearchBean {
private Rarity minRarity = Rarity.None;
private Rarity maxRarity = Rarity.None;
...
}
请注意,表单提交按钮实际上调用了ajax请求,因此没有完整页面重新加载。
提交按钮:
<p:commandButton value="Search"
actionListener="#{itemSearchBean.refreshTable}"
update="itemTable,notify"/>
我已经尝试使用简单的重置按钮,但它只是将表单重置为上次提交的值:
<p:commandButton type="reset" value="Reset"/>
一个人必须以某种方式向服务器请求一个新的bean(或阻止它填充bean),但我不知道如何做到这一点。
答案 0 :(得分:2)
您应该可以使用指向同一视图的纯HTML链接来执行此操作:
<a href="yourpage.xhtml">Reset</a>
或让JSF为您创建链接:
<h:link value="Reset" />
这样你就会有一个新的GET请求,它会创建一个新的UIViewRoot,就像你在新浏览器选项卡中访问同一个视图一样。
如果您想要一个按钮,可以使用h:button
<h:button value="Reset" />
此按钮将依赖于将在点击时重新加载页面的Javascript。
答案 1 :(得分:1)
您也可以进行两阶段设置。更多的工作,但如果你进一步采取行动,允许各种撤销工作流程。
基本上,有两个bean用通常的访问器/ mutator对封装你的表单。然后在你的控制器中,只暴露一个(x或y),那就是你的“表单bean”。在y中,您存储从存储库中检索的原始副本,这样您就可以执行字段级别或Bean级别的还原,而无需重新加载页面或从存储库中执行完整数据重新存储。
所以,简单地说:
还有其他方法来修饰“撤消”猫,这只是另一种方法。