我正在为我的网站做一个管理面板。我使用PrimeFaces登录表单为admin.I可以登录并查看messages.But我想在管理员登录后将页面重定向到另一个页面。我不能这样做我怎么办?
<h:form>
<p:growl id="growl" sticky="true" showDetail="true" life="3000" />
<h:panelGrid columns="2">
<h:outputLabel for="username" value="Username:" />
<p:inputText id="username" value="#{userLoginView.username}" required="true" label="username" />
<h:outputLabel for="password" value="Password:" />
<p:password id="password" value="#{userLoginView.password}" required="true" label="password" />
<h:column>
<p:commandButton value="Login"
update="growl"
actionListener="#{userLoginView.login}"
oncomplete="handleLoginRequest(xhr, status, args)" />
</h:column>
</h:panelGrid>
</h:form>
@ManagedBean
public class UserLoginView {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void login(ActionEvent event) {
RequestContext context = RequestContext.getCurrentInstance();
FacesMessage message = null;
boolean loggedIn = false;
if (username != null && username.equals("admin") && password != null && password.equals("admin")) {
loggedIn = true;
message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username);
} else {
loggedIn = false;
message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Loggin Error", "Invalid credentials");
}
FacesContext.getCurrentInstance().addMessage(null, message);
context.addCallbackParam("loggedIn", loggedIn);
}
}
答案 0 :(得分:1)
您可以使用action
属性代替actionListener
属性,只需在操作方法中返回导航信息。
例如:
return "theApplicationPage.xhtml?faces-redirect=true";
您应该使您的支持bean视图作用域(JSF 2.2与CDI兼容)。你可以写:
@Named
@ViewScoped
public class UserLoginView implements Serializable{
private static final long serialVersionUID = 1L;
....
答案 1 :(得分:1)
您可以简单地为方法提供重定向操作:
在Managed Bean中,在登录方法中:
if (username != null && username.equals("admin") && password != null && password.equals("admin")) {
loggedIn = true;
message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", username);
// Edit :
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().redirect("/newfodler/newindex.xhtml");
无关:要在新的重定向页面中显示结果的消息(如欢迎用户名),您应该使用:
context.getExternalContext().getFlash().setKeepMessages(true);
这样,网页之间的交易信息就不会丢失。
答案 2 :(得分:0)
由于我无法评论,我几乎都在回应lametaweb消息。
您可以使用action属性而不是actionListener属性,只需在操作方法中返回导航信息。
例如:
return "theApplicationPage.xhtml?faces-redirect=true";
相反,我会返回一个字符串&#34; theApplicationPage&#34;
return "theApplicationPage";
并在faces-config.xml中创建导航规则:
<navigation-rule>
<display-name>login.xhtml</display-name>
<from-view-id>/jsp/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>theApplicationPage</from-outcome>
<to-view-id>/jsp/menu.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
我会将支持bean会话作为范围,您可能稍后会使用它来呈现或向您的网站添加更多功能。只需添加 @SessionScoped
在@ManagedBean之后。