如何在jsf1.1中通过托管Bean读取查询字符串值
如何在jsf1.1中通过托管bean读取查询字符串值如何在jsf1.1中通过托管Bean读取查询字符串值,jsf,Jsf,如何在jsf1.1中通过托管bean读取查询字符串值 String queryString = ((HttpServletRequest) FacesContext.getCurrentContext() .getExternalContext().getRequest()).getQueryString(); 在需要的地方,将其放在动作方法或阶段侦听器中。不要把它放在构造函数中。我不确定Bozho的答案如何对您不起作用,但不管怎样,我建议让JSF完成所有工作,而不是从一个bea
String queryString = ((HttpServletRequest) FacesContext.getCurrentContext()
.getExternalContext().getRequest()).getQueryString();
在需要的地方,将其放在动作方法或阶段侦听器中。不要把它放在构造函数中。我不确定Bozho的答案如何对您不起作用,但不管怎样,我建议让JSF完成所有工作,而不是从一个bean中的JSF罩下获取“原始”
HttpServletRequest
。使用JSF托管属性工具
首先,向bean中添加两个属性:confirmuser
和emailid
,当然还有getter和setter。然后,在faces config.xml
中将它们定义为托管属性,其中它们将被{param.confirmuser}
和{param.emailid}
填充。您可能已经知道,{param}
指向请求参数映射
例如
用户管理器
com.example.UserManager
要求
确认人
#{param.confirmuser}
电子邮件ID
#{param.emailid}
通过这种方式,JSF将自动使用这些值设置bean属性。您可以通过在命令按钮内将查询字符串参数作为
值传递来实现这一点
例如,给定以下URL(即,用户在电子邮件中单击此URL,因此尚未执行任何支持bean代码):
您的JSF代码:
<h:commandButton action="#{resetPasswordController.doActualReset}" value="Submit">
<f:param name="code"
value="#{param.code}" />
<f:param name="uuid"
value="#{param.uuid}" />
</h:commandButton>
public String doActualReset() {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap();
String code = (String) requestMap.get("code");
String uuid = (String) requestMap.get("uuid");
...
}
BackingBean:
<h:commandButton action="#{resetPasswordController.doActualReset}" value="Submit">
<f:param name="code"
value="#{param.code}" />
<f:param name="uuid"
value="#{param.uuid}" />
</h:commandButton>
public String doActualReset() {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap();
String code = (String) requestMap.get("code");
String uuid = (String) requestMap.get("uuid");
...
}
公共字符串doActualReset(){
FacesContext context=FacesContext.getCurrentInstance();
Map requestMap=context.getExternalContext().getRequestParameterMap();
字符串代码=(String)requestMap.get(“代码”);
字符串uuid=(字符串)requestMap.get(“uuid”);
...
}
警告:这在JSF2中进行了测试,但在1.1中应该可以使用。这里没有特定于2.x的内容。此查询字符串(确认用户,emailid)无法通过您的代码读取它将打印空值我没有得到您的解释亲爱的Bozho,这是url包含查询字符串,它由Beans构造函数读取。我使用了你在我的bean中给出的代码。它使用Jsf1.1显示null.Iam。jsf1.1不受#{param}El支持。我想在jsf1.1中解决这个问题,它在jsf1.1中受支持。更重要的是,它独立于JSF。如果它不能解决你的问题,那么问题的原因就在其他地方。这可能与您没有从
getQueryString()
中获得任何信息的原因相同。在请求链中没有一些奇怪的过滤器或servlet,它们在转发之前操纵URL吗?这个例子在我之前犯了一个错误。谢谢Baulc#{facesContext.externalContext.requestParameterMap.get('code')}
很笨拙。只需使用{param.code}
。此外,在JSF1的EL范围内没有{facesContext}
。我已经根据您的评论更新了样本。谢谢