0

我正在使用 Primefaces mobile(0.9.3 和 Primefaces 3.5)构建 JSF 应用程序。我有一个登录页面,在这个登录页面上有一个登录按钮,定义如下:

<p:commandButton value="#{msg['label.login']}" action="#{loginBean.login}" update="usernameMsg" />

loginBean.login 方法定义如下:

public String login() {
try {
    //do login
    return "#loggedInTarget?transition=fade";
} catch (UserNotValidException e) {
    //User not valid, display exception
    FacesContext
            .getCurrentInstance()
            .addMessage(
                    "loginForm:username",
                    new FacesMessage(
                            FacesMessage.SEVERITY_ERROR,
                            "",
                            messageService
                                    .getMessage("error.message.loginNotSuccessfull")));
} 
return null;

}

在我的主 xhtml(与定义按钮相同)中,我定义了以下附加视图:

<pm:view id="registerTarget">
        <ui:include
            src="/WEB-INF/c52bc19d58a64ae4bd12dec187a2d4b7/register.xhtml" />
    </pm:view>
    <pm:view id="loggedInTarget">
        TEST
    </pm:view>

我这样做是因为我想在 Primefaces mobile 中使用过渡。要进入注册页面,我使用 ap:button 可以正常工作:

<p:button value="#{msg['label.register']}"
                        href="#registerTarget?transition=fade" />

为什么我的登录按钮不起作用?我还尝试将“#loggedInTarget?transition=fade”作为操作直接放入,但这也不起作用:(

我需要该操作,因为我必须检查用户凭据是否有效。如果它们有效,我想显示我的 loggedInTarget。

我怎样才能实现它?

提前致谢!

编辑:按钮在表单内。

4

1 回答 1

0

导航案例结果值必须表示视图 ID,而不是 URL(肯定不是哈希片段)。尝试使用<p:button outcome="...">,你会发现它在那里也失败了。

您最接近的赌注是发送重定向。

public void login() throws IOException {
    // ...
    externalContext.redirect("#loggedInTarget?transition=fade");
    // ...
}

这也正是<p:button href="...">它在幕后所做的:在给定的 URL 上引发 GET 请求。

于 2013-07-17T11:44:40.673 回答