【问题标题】:How to retain f:viewParam values after postback with validation failed [duplicate]如何在验证失败的回发后保留 f:viewParam 值 [重复]
【发布时间】:2012-09-07 08:01:51
【问题描述】:

我有一个简单的 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!"/>

在尝试接受没有输入文本的表单后,我无法恢复视图参数。 我尝试使用隐藏输入来传递参数

<h:inputHidden id="page" value="#{itemsBean.page}" />

,但似乎验证运行之前并且 itemsBean.page 仍然是空的。 itemsBean 是 RequestScoped。我做错了什么?如何传递参数?

感谢您浪费时间。

【问题讨论】:

    标签: validation jsf jsf-2 postback viewparams


    【解决方案1】:

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

    您应该在UICommand 组件中使用&lt;f:param&gt;,而不是为后续请求保留请求参数。例如

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

    或者,您可以使用OmniFaces JSF utility library&lt;o:form&gt;,它基本上扩展了&lt;h:form&gt; 附加属性includeViewParams,它使您能够在表单操作URL 中保留后续请求的视图参数。

    <o:form includeViewParams="true">
        ...
    </o:form>
    

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

    【讨论】:

    • 谢谢!我只是忘记在 commandButton 中尝试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2011-03-07
    • 1970-01-01
    • 2013-11-03
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多