JSF验证错误,丢失值

JSF验证错误,丢失值,jsf,Jsf,我有一个更新表单,使用组合键,所有组合键都显示在outputbox中,因为我有每个组合键的隐藏字段。验证错误后,这些输出框值为空。我如何解决这个问题。我在同一页上,所以它不需要有值 这确实是h:inpurthidden的一种非直觉行为(我曾在Mojarra发行清单上对其提出过异议,但他们似乎没有对此采取任何行动)。整个问题是,组件的值不必要地也被纳入整个验证周期,而用户无法控制输入。当验证失败时,它将丢失。至少有三种方法可以修复这种非直觉行为 第一种方法是在h:inpurthidden上使用绑定

我有一个更新表单,使用组合键,所有组合键都显示在outputbox中,因为我有每个组合键的隐藏字段。验证错误后,这些输出框值为空。我如何解决这个问题。我在同一页上,所以它不需要有值

这确实是
h:inpurthidden
的一种非直觉行为(我曾在Mojarra发行清单上对其提出过异议,但他们似乎没有对此采取任何行动)。整个问题是,组件的值不必要地被纳入整个验证周期,而用户无法控制输入。当验证失败时,它将丢失。至少有三种方法可以修复这种非直觉行为

第一种方法是在
h:inpurthidden
上使用
绑定

<h:inputHidden binding="#{bean.hidden}" />
第二种方法(我认为最好的方法是)是使用的
t:saveState

<t:saveState value="#{bean.property}" />

主要的优点是您不需要更改支持bean代码中的任何内容。它将在应用请求值阶段之前尽早恢复该值。如果还没有添加,您只需要添加额外的库,但是Tomahawk提供了比只添加
t:saveState
更多的优势,例如基本JSF实现中缺少组件/功能
t:inputFileUpload
t:dataList
t:dataTable preserveDataModel=“true”
t:selectOneRadio布局=“传播”
等等,这是值得努力的

第三种方法是将其存储在会话范围的bean中,但实际上您不希望对请求范围的变量执行此操作。只有当最终用户在同一会话中打开多个选项卡/窗口时,它才会提供“wtf”体验

<t:saveState value="#{bean.property}" />