如何将表单提交到同一页面并使用GET参数?
<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,它将填充文本字段,但表单提交到自身似乎不起作用.
解决方法
替换< 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,并使用plain< 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>执行.在目标页面上.
也可以看看:
> What can <f:metadata>,<f:viewParam> and <f:viewAction> be used for?