如何将表单提交到同一页面并使用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&amp; item2 = bar,它将填充文本字段,但表单提交到自身似乎不起作用。
答案 0 :(得分:14)
将<h:button>
替换为
<h:commandButton value="Submit" action="form?faces-redirect=true&includeViewParams=true"/>
它有效地触发PRG(Post-Redirect-Get),它将在查询字符串中包含<f:viewParam>
参数。注意到目标页面必须具有完全相同的<f:viewParam>
。
另一个解决方案是使用纯HTML <form>
而不是<h:form>
,为输入元素提供与参数名称匹配的id
并使用普通<input type="submit">
。您当然也可以在这里使用纯HTML <input type="text">
。
<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>
执行。
答案 1 :(得分:0)
您还可以注册处理“self”之类关键字的NavigationHandler
,并重定向到当前视图并添加必要的查询参数。