当我部署到 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>
如果返回值是 REQUEST_USER_PROFILES_SELECTION,那么它在 faces-config 中工作正常,对于该 xhtml (googleIdLogin),它将重定向到 userProfilesSelection.xhtml。并且 #{userProfileSelectionBean.userProfiles} 将在后台 bean 操作 (#{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 值,它是 null 好像我在重定向后收到了另一个 bean。
好吧...如果我使用 forward 间接取出。现在遗嘱有价值。问题是 commonButton 没有触发回调 bean 操作的调用 (#{userProfileSelectionBean.selectUserProfile}"。
总结如下: - 如果使用重定向,则不会获取值 - 如果不使用重定向,则填充值但不触发 bean bean 操作。