使用 GET 提交 JSF 表单

发布于 2024-10-15 05:22:51 字数 606 浏览 2 评论 0原文

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

How do I submit a form to the same page and use GET parameters?

JSF page contents:

<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>

If I request the page: form.jsf?item1=foo&item2=bar, it will populate the text fields, but the form submission to itself doesn't seem to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蹲墙角沉默 2024-10-22 05:22:51

替换为

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

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

另一个解决方案是使用纯 HTML

而不是 ,为输入元素提供一个与参数名称并使用简单的 。当然,您也可以在此处使用纯 HTML

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

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

您仍应保留两侧的 。您只需要意识到转换/验证无法以这种形式完成,它们必须通过目标页面上的 执行。

另请参阅:

Replace <h:button> by

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

It effectively fires a PRG (Post-Redirect-Get) which will include the <f:viewParam> params in the query string. Noted should be that the target page must have exactly same <f:viewParam>.

Another solution is to use a plain HTML <form> instead of <h:form>, give the input elements an id matching the parameter name and use a plain <input type="submit">. You can of course also use plain HTML <input type="text"> here.

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

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

You should still keep the <f:viewParam> in both sides. You only need to realize that conversion/validation couldn't be done in this form, they have to be performed via the <f:viewParam> on the target page.

See also:

海夕 2024-10-22 05:22:51

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

You could also register a NavigationHandler that handles a keyword like 'self' and redirects to the the current view and adds the necessary query parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文