2015-09-29 3 views
0

Я занимаюсь административной панелью для своего сайта. Я использовал форму для входа в PrimeFaces для администратора. Я могу войти в систему и просмотреть сообщения. Но я хочу перенаправить страницу на другую страницу после регистрации администратора Я не мог этого сделать. Как я могу это сделать?Переадресовать страницу входа на другую страницу в JSF

<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

Какую версию JSF вы используете? – lametaweb

ответ

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); 

Таким образом, сообщения не теряются при транзакции между страницами.

+0

Спасибо, что это для меня – mery

+0

Добро пожаловать –

+0

@Chaibi Alaa ответ объясняет программный вариант для перенаправления. В простых сценариях я пойду на решение, указанное в моем ответе. – lametaweb

1

Вы можете использовать action атрибут вместо actionListener атрибут и просто вернуть навигационную информацию в методе действий.

Например:

return "theApplicationPage.xhtml?faces-redirect=true"; 

Вы должны сделать свой вид подложки боб область действия (JSF 2.2 для совместимости с КДИ). Вы можете написать:

@Named 
@ViewScoped 
public class UserLoginView implements Serializable{ 
    private static final long serialVersionUID = 1L; 
    .... 
0

Как я не могу комментировать, я почти отвечаю на сообщение lametaweb.

Вы можете использовать атрибут action вместо атрибута actionListener и просто вернуть навигационную информацию в методе действий.

Например:

return "theApplicationPage.xhtml?faces-redirect=true"; 

Вместо этого, я бы вернуть строку "theApplicationPage"

return "theApplicationPage"; 

и создать правило навигации в лицах-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.

+0

нет. Во-первых, это не сообщение, это ответ. Во-вторых, во всех технических дисциплинах есть очень важный актер: лучшие практики. Вы должны начинать и применять их с самого начала.Итак, в общем, для страниц Ajax просмотрите область действия с самого начала. В отношении навигации я предпочитаю неявную навигацию, представленную в JSF 2.0. Это понятно, эффективно и легко управлять. – lametaweb

Смежные вопросы