如何通过jsf1.1
中的托管bean读取查询字符串值答案 0 :(得分:2)
我不确定Bozho的答案是如何不适合你的,但无论如何,我建议让JSF完成所有工作而不是从JSF下获取“原始”HttpServletRequest
豆里面的帽子。使用JSF托管属性工具。
首先,向bean添加两个属性:confirmuser
和emailid
,当然还有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特定的。