Forms 不填充请求范围的bean
我有一个请求范围的bean,它由表单中的各种属性填充。然后使用这些属性更新另一个视图范围的bean。现在,我想让用户能够重置表单,使所有表单字段都保存第一次加载页面时的值。这些值是通过bean本身定义的:Forms 不填充请求范围的bean,forms,jsf,managed-bean,Forms,Jsf,Managed Bean,我有一个请求范围的bean,它由表单中的各种属性填充。然后使用这些属性更新另一个视图范围的bean。现在,我想让用户能够重置表单,使所有表单字段都保存第一次加载页面时的值。这些值是通过bean本身定义的: @ManagedBean @RequestScoped public class ItemSearchBean { private Rarity minRarity = Rarity.None; private Rarity maxRarity = Rarity.None;
@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),但我不知道如何做到这一点。您应该能够通过指向同一视图的普通HTML链接做到这一点:
<a href="yourpage.xhtml">Reset</a>
此按钮将依赖于一个Javascript,该Javascript将在单击时重新加载页面。您还可以进行两阶段设置。需要做更多的工作,但如果您更进一步的话,可以使用各种撤销工作流 基本上,有两个bean用常用的访问器/变异器对封装表单。然后在您的控制器中,只公开一个(x或y),这就是您的“表单bean”。在y中,您存储从存储库中检索的原始副本,这样您就可以执行字段级或bean级的恢复,而无需重新加载页面或从repo执行完整的数据重新存储 因此,简单地说:
- 2个bean来封装表单(如果实体映射到表单上,您甚至可以重用它)
- 在数据整理期间从回购协议中填写
- 在facelets中向用户公开一个
- 保留第二个作为备份,以便重置/恢复字段或整个表单
还有其他方法可以对“撤消”cat进行蒙皮,这只是另一种方法。谢谢,这是一种预期的方法,但是是否也有一种基于ajax的方法(希望不是手动设置每个属性)可以省略完整的页面重新加载?不客气。不,我不知道。但实际上,重新加载页面并不坏,HTTP流不会变得比这更简单,并且您的代码保持在最小值。:)我不认为AJAX为这种事情带来太多好处。
<h:link value="Reset" />
<h:button value="Reset" />