validation - 如何保留 f :viewParam values after postback with validation failed

标签 validation jsf jsf-2 postback viewparams

这个问题在这里已经有了答案:





Retaining GET request query string parameters on JSF form submit

(2 个回答)


5年前关闭。




我有简单形式的 xhtml 页面。此页面用于多个数据表。为了指定数据表(等等),我使用 GET 请求参数。 xhtml页面通过

  <f:metadata>
    <f:viewParam id="page" name="page" value="#{itemsBean.page}"/>
  </f:metadata>

并再次通过导航规则,如
  <navigation-case>
  <description>
  Global rule for going to the items page from any page  
  </description>
  <from-outcome>items</from-outcome>
  <to-view-id>/items.xhtml</to-view-id>
  <redirect>
    <view-param>
      <name>page</name>
      <value>#{itemsBean.page}</value>
    </view-param>  
  </redirect>  
  </navigation-case>

但是如果我像这样在 xhtml 文件中使用输入
  <h:inputText id="itemName" value="#{itemsBean.name}" 
    required="true" requiredMessage="Value for this field required!"/>

尝试接受没有输入文本的表单后,我无法恢复 View 参数。
我尝试使用隐藏输入来传递参数
<h:inputHidden id="page" value="#{itemsBean.page}" />

,但似乎验证运行之前和 itemsBean.page 仍然是空的。 itemsBean 是 RequestScoped。我做错了什么?我怎样才能传递参数?

谢谢你浪费你的时间。

最佳答案

您需要不断将请求参数传递给后续请求。在“普通”HTML 中,您确实会使用 <input type="hidden">为此,但 JSF <h:inputHidden>不幸的是不能那样工作。如果由另一个输入字段引起的一般验证失败,则与 <h:inputHidden> 关联的模型值根本不会更新。

您应该使用 <f:param>UICommand组件而不是为后续请求保留请求参数。例如。

<h:commandButton ...>
    <f:param name="page" value="#{param.page}" />
</h:commandButton>

或者,您可以使用 <o:form> OmniFaces JSF utility library ,它基本上扩展了 <h:form>带有附加属性 includeViewParams这使您能够在表单操作 URL 中保留后续请求的 View 参数。
<o:form includeViewParams="true">
    ...
</o:form>

如果您有多个命令按钮/链接和 ajax 操作,这最终可能会更容易,如果您想在非 ajax 回发期间保留相同的 URL,这将是唯一的方法。

关于validation - 如何保留 f :viewParam values after postback with validation failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314081/

相关文章:

java - Internet Explorer 想要下载 GuessNumber 示例应用程序的网页而不是显示它

servlets - ManagedBean 类中的 Java Faces ServletContext 对象

jsf-2 - 未知标签 .xhtml jsf <f : selectItems/>

javascript - 无法在 Javascript 中验证日期

asp.net - 为什么需要执行服务器端验证?

html - 表单隐藏字段和必需的验证使用

jsf - p :graphicImage which can show images from byte[] and control browser cache 的替代方案

python - 在 Keras 中对具有不同分辨率的图像进行训练和验证

jsf - 扩展 @FacesComponent 作为复合接口(interface) componentType 不呈现任何内容

javascript - 添加输入隐藏字段值的方法