如何从非面部请求调用JSF支持bean方法?

时间:2010-07-08 10:16:02

标签: jsf

对于使用单点登录在JSF中编写的Web应用程序,我们需要替换当前的登录名。目前,我们的login.jsp调用支持bean上的authenticate方法来实现此目的并执行其他角色验证。现在身份验证将由我的单点登录服务器完成,但是我如何在辅助bean上调用authenticate方法来执行角色验证

1 个答案:

答案 0 :(得分:2)

将请求参数设置为托管属性,并使用@PostConstruct注释在bean构造和托管属性设置后立即执行一些代码。

您可以将GET或POST请求参数设置为托管属性,如下所示:

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>mypackage.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>name1</property-name>
        <value>#{param.name1}</value>
    </managed-property>
    <managed-property>
        <property-name>name2</property-name>
        <value>#{param.name2}</value>
    </managed-property>
</managed-bean>

或者,如果您已经使用JSF 2.0,那么您可以使用@ManagedProperty

@ManagedProperty(value="#{param.name1}")
private String name1;

@ManagedProperty(value="#{param.name2}")
private String name2;

当enduser使用name1=value1&name2=value2查询字符串触发GET或POST请求时,将设置这些参数。 #{param.name1} EL表达式基本上代表request.getParameter("name1")的结果。

现在创建一个@PostConstruct方法,如下所示:

@PostConstruct
public void init() {
    if (name1 != null && name2 != null) {
        // Both request parameters are been set. Do your thing here!
    }
}