使用 GET 提交 JSF 表单
Posted
技术标签:
【中文标题】使用 GET 提交 JSF 表单【英文标题】:Submit a JSF form using GET 【发布时间】:2011-06-16 22:20:09 【问题描述】:如何将表单提交到同一页面并使用 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,它将填充文本字段,但提交给自身的表单似乎不起作用。
【问题讨论】:
【参考方案1】:将<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>
进行。
另见:
What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?【讨论】:
【参考方案2】:您还可以注册一个NavigationHandler
,它处理诸如“self”之类的关键字并重定向到当前视图并添加必要的查询参数。
【讨论】:
以上是关于使用 GET 提交 JSF 表单的主要内容,如果未能解决你的问题,请参考以下文章
会话到期时的授权重定向不适用于提交 JSF 表单,页面保持不变