在命令Button上成功执行操作后导航

时间:2013-07-16 23:41:20

标签: jsf primefaces navigation commandbutton primefaces-mobile

我正在使用Primefaces mobile(使用Primefaces 3.5的0.9.3)构建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中使用过渡。要进入注册页面,我使用p:按钮,工作正常:

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

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

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

我怎样才能实现它?

提前致谢!

修改: 按钮位于表单内。

1 个答案:

答案 0 :(得分:0)

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

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

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

这也正是<p:button href="...">所涵盖的内容:在给定的网址上发出GET请求。