重定向后,<f:selectitems>无法获取值</f:selectitems>

时间:2013-03-21 23:32:11

标签: google-app-engine richfaces

当我部署到GAE时,这种情况就出现了。它在我的本地工作正常。不知道是由于GAE只在客户端存储会话。

好吧,使用Google身份验证后,它会重定向回我的xhtml页面。从那里它将调用backbean并根据条件重定向到其他页面。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j">

<h:head>
    <script>
        function myfunc() {
            var buttonvar = document.getElementById("googleLoginForm:loginButton");
            buttonvar.click();
        }
    </script>
</h:head>
<body onload="myfunc()">
    Google account login success... please wait while processing your CEA account....
    <h:form rendered="true" id="googleLoginForm">
        <h:commandButton value="submit" id="loginButton" type="submit" immediate="true" style="visibility:hidden;"
            action="#{guestSupportBean.authenticationGoogle}">
            <f:param name="resultComponentId" value="googleLoginLink" />    
        </h:commandButton>
    </h:form>
</body>
</html>

这项工作很好,在faces-config中,对于xhtml(googleIdLogin),如果返回值是REQUEST_USER_PROFILES_SELECTION,那么它将重定向到userProfilesSelection.xhtml。在后bean操作期间,#{userProfileSelectionBean.userProfiles}将是init(#{guestSupportBean.authenticationGoogle})。

<navigation-rule>
    <display-name>googleIdLogin</display-name>
    <from-view-id>/public/idm/googleIdLogin.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>REQUEST_USER_PROFILES_SELECTION</from-outcome>
        <to-view-id>/public/idm/userProfilesSelection.xhtml</to-view-id>
        <redirect />
    </navigation-case>
<navigation-rule>

userProfileSelection.xhtml将在下拉选项中显示用户配置文件列表,这在我的本地工作正常,但在部署到GAE时则不行。

<rich:select id="userProfile" 
    value="#{userProfileSelectionBean.userProfileUid}"
    defaultLabel="#{msg.clickToSelect} #{msg.title}">
    <f:selectItems value="#{userProfileSelectionBean.userProfiles}" />
</rich:select>

<h:commandButton value="#{msg.selectUserProfile}" type="submit" 
    action="#{userProfileSelectionBean.selectUserProfile}">
</h:commandButton>

我尝试打印输出bean值,它看起来像是在重定向后我收到另一个bean。

好吧......如果我间接使用前锋。现在意志有价值。问题是commonButton没有触发对后bean操作的调用(#{userProfileSelectionBean.selectUserProfile}&#34;。

总结如下: - 如果使用重定向,则不会获得该值 - 如果不使用重定向,请填充值,但不要触发bean bean操作。

1 个答案:

答案 0 :(得分:0)

找到解决方法......

我需要在init userProfileSelectionBean.userProfiles之后在guestSupportBean.authenticationGoogle方法中手动设置会话。奇怪,但它的工作。

FacesContext.getCurrentInstance()。getSessionMap()。put(“something”,“some value”);