【问题标题】:Submit a JSF form using GET使用 GET 提交 JSF 表单
【发布时间】:2011-06-16 22:20:09
【问题描述】:

如何将表单提交到同一页面并使用 GET 参数?

JSF 页面内容:

<f:metadata>
    <f:viewParam name="item1" value="#{bean.item1}"/>
    <f:viewParam name="item2" value="#{bean.item2}"/>
</f:metadata>

...

<h:form>
  <h:inputText value="#{bean.item1}"/>
  <h:inputText value="#{bean.item2}"/>

  <h:button value="Submit" >
      <f:param name="item1" value="#{bean.item1}"/>
      <f:param name="item2" value="#{bean.item2}"/>
  </h:button>
</h:form>

如果我请求页面:form.jsf?item1=foo&item2=bar,它将填充文本字段,但提交给自身的表单似乎不起作用。

【问题讨论】:

    标签: forms jsf jsf-2 http-get viewparams


    【解决方案1】:

    &lt;h:button&gt; 替换为

    <h:commandButton value="Submit" action="form?faces-redirect=true&amp;includeViewParams=true"/>
    

    它有效地触发了一个 PRG(Post-Redirect-Get),它将在查询字符串中包含 &lt;f:viewParam&gt; 参数。注意应该是目标页面必须具有完全相同的&lt;f:viewParam&gt;

    另一种解决方案是使用纯 HTML &lt;form&gt; 而不是 &lt;h:form&gt;,为输入元素提供与参数名称匹配的 id,并使用纯 &lt;input type="submit"&gt;。当然你也可以在这里使用纯 HTML &lt;input type="text"&gt;

    <form>
        <h:inputText id="item1" value="#{bean.item1}"/>
        <h:inputText id="item2" value="#{bean.item2}"/>
    
        <input type="submit" value="Submit" />
    </form>
    

    您仍应在两侧保留&lt;f:viewParam&gt;。您只需要意识到这种形式无法进行转换/验证,必须通过目标页面上的&lt;f:viewParam&gt;进行。

    另见:

    【讨论】:

      【解决方案2】:

      您还可以注册一个NavigationHandler,它处理诸如“self”之类的关键字并重定向到当前视图并添加必要的查询参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多