mon*_*nch 7 forms jsf http-get jsf-2 viewparams
如何将表单提交到同一页面并使用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>
Run Code Online (Sandbox Code Playgroud)
如果我请求页面:form.jsf?item1 = foo&item2 = bar,它将填充文本字段,但表单提交到自身似乎不起作用.
Bal*_*usC 14
替换<h:button>为
<h:commandButton value="Submit" action="form?faces-redirect=true&includeViewParams=true"/>
Run Code Online (Sandbox Code Playgroud)
它有效地触发PRG(Post-Redirect-Get),它将<f:viewParam>在查询字符串中包含params.注意到目标页面必须完全相同<f:viewParam>.
另一个解决方案是使用纯HTML <form>而不是<h:form>,给输入元素id匹配参数名称并使用plain <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>
Run Code Online (Sandbox Code Playgroud)
你应该仍然保持<f:viewParam>双方.您只需要意识到转换/验证无法以此形式完成,它们必须通过<f:viewParam>目标页面执行.