当我在下面提到的页面中点击<h:form>
标签的命令按钮时,我希望在我点击提交按钮后将查询参数作为请求参数发送,因为我的页面网址为../index.xhtml?cid=12&ctype=video
。
我希望在我的操作方法中应该打印CID=12
,但是,它会打印CID=NULL
。有什么问题,如何解决?
我的观点:
<h:body id="body">
<h:form id="form">
<p:commandButton action="#{authorizationBean.getParameters()}" value="Ajax Submit" id="ajax" />
</h:form>
</h:body>
我的托管bean:
@ManagedBean
@SessionScoped
public class AuthorizationBean {
public boolean getParameters(){
Map<String, String> parameterMap = (Map<String, String>) FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap();
String cid = parameterMap.get("cid");
System.out.println("CID="+cid);
return true;
}
}
答案 0 :(得分:6)
默认情况下,您的代码(尤其是您的<h:form>
标记)会生成以下HTML输出:
<form id="form" name="form" method="post" action="/yourApp/yourPage.xhtml" enctype="application/x-www-form-urlencoded">
<input type="submit" name="j..." value="Ajax Submit" />
<input id="javax.faces.ViewState" ... />
</form>
请注意,生成的action
元素的<form>
是当前视图ID,没有附加任何get参数,尽管初始页面可能已经拥有它们。因此,它们也不会在表单上设置。
要处理这种情况,你可以:
@ViewScoped
bean; <f:param>
内嵌套<h:commandButton>
; <o:form includeViewParams="true">
代码(Tag documentation / Showcase example)代替<h:form>
,因为它会提交到附加了视图参数的当前网址,前提是它们是使用<f:viewParam>
设置(例如,请参阅BalusC对Retain original GET request parameters across postbacks的回答了解详情)。答案 1 :(得分:1)
这是我的方式,我不能告诉你它是否是最好的方式......
客户端:
<h:outputLink target="_blank" value="detalhepesquisa.jsf">
<h:outputText value="#{te.empresa.nome}" />
<f:param name="id" value="#{te.empresa.id}"></f:param>
</h:outputLink>
在你的bean中:
String parametroID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");