如何在jsf1.1中通过托管Bean读取查询字符串值

如何在jsf1.1中通过托管Bean读取查询字符串值,jsf,Jsf,如何在jsf1.1中通过托管bean读取查询字符串值 String queryString = ((HttpServletRequest) FacesContext.getCurrentContext() .getExternalContext().getRequest()).getQueryString(); 在需要的地方,将其放在动作方法或阶段侦听器中。不要把它放在构造函数中。我不确定Bozho的答案如何对您不起作用,但不管怎样,我建议让JSF完成所有工作,而不是从一个bea

如何在jsf1.1中通过托管bean读取查询字符串值

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}
。我已经根据您的评论更新了样本。谢谢