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