我正在使用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。
我怎样才能实现它?
提前致谢!
修改: 按钮位于表单内。
答案 0 :(得分:0)
导航案例结果值必须表示视图ID,而不是URL(肯定不是哈希片段)。尝试<p:button outcome="...">
,你会发现它也失败了。
您最接近的赌注是发送重定向。
public void login() throws IOException {
// ...
externalContext.redirect("#loggedInTarget?transition=fade");
// ...
}
这也正是<p:button href="...">
所涵盖的内容:在给定的网址上发出GET请求。