8

如何将表单提交到同一页面并使用 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,它将填充文本字段,但提交给自身的表单似乎不起作用。

4

2 回答 2

15

替换<h:button>

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

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

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

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

    <input type="submit" value="Submit" />
</form>

你仍然应该保持<f:viewParam>在两边。您只需要意识到不能以这种形式完成转换/验证,它们必须通过<f:viewParam>目标页面上的来执行。

也可以看看:

于 2011-01-27T23:46:11.277 回答
0

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

于 2013-03-26T22:20:24.953 回答