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

时间:2010-04-01 09:09:38

标签: jsf

如何通过jsf1.1

中的托管bean读取查询字符串值

3 个答案:

答案 0 :(得分:2)

我不确定Bozho的答案是如何不适合你的,但无论如何,我建议让JSF完成所有工作而不是从JSF下获取“原始”HttpServletRequest豆里面的帽子。使用JSF托管属性工具。

首先,向bean添加两个属性:confirmuseremailid,当然还有getter和setter。然后,将它们定义为faces-config.xml中的托管属性,其中它们将填充#{param.confirmuser}#{param.emailid}。您可能已经知道,#{param}指向请求参数映射。

E.g。

<managed-bean>
    <managed-bean-name>userManager</managed-bean-name>
    <managed-bean-class>com.example.UserManager</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>confirmuser</property-name>
        <value>#{param.confirmuser}</value>
    </managed-property>
    <managed-property>
        <property-name>emailid</property-name>
        <value>#{param.emailid}</value>
    </managed-property>
</managed-bean>

这样JSF会自动使用这些值设置bean属性。

答案 1 :(得分:0)

String queryString = ((HttpServletRequest) FacesContext.getCurrentContext()
       .getExternalContext().getRequest()).getQueryString();

将它放在action方法或需要它的阶段监听器中。不要把它放在构造函数中。

答案 2 :(得分:0)

您可以通过将查询字符串参数作为<f:param />值传递到命令按钮中来完成此操作。

例如,给定以下URL(即用户在电子邮件中单击此链接,因此尚未执行任何后端bean代码):

http://localhost:8080/webapp/resetPassword.xhtml?uuid=3d7844ba-5f4b-4de0-9595-fdcbdedad4dc&code=a2JITmEyamJhQ29HTVhyaHhhNnRqdXI3T1kyMldydU4=

您的JSF代码

<h:commandButton action="#{resetPasswordController.doActualReset}" value="Submit">
    <f:param name="code" 
        value="#{param.code}" />
    <f:param name="uuid"
        value="#{param.uuid}" />
</h:commandButton>

BackingBean

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");
    ...
}

警告:这是在JSF 2中测试的,但应该在1.1中工作。这里没有什么是2.x特定的。