2013-04-08 7 views
0

Я использую richfaces 4. И у меня есть session bean с свойством - пользователем. Я ожидаю, что мои xhtml-страницы не будут отображаться для запросов, если пользователь имеет значение null, потому что у меня есть faces-config.xml с if-tag (см. Ниже). Но они отображают (только когда я набираю url myComp: 8080/JSF/faces/clients.xhtml), и я вижу в отладчике, что свойство пользователя не проверяется в сеансовом компоненте.richfaces 4 + jsf и faces-config.xml, который не работает

лица-config.xml

<navigation-rule> 
    <from-view-id>/login.xhtml</from-view-id> 
     <navigation-case> 
     <from-outcome>clients</from-outcome> 
     <if>#{userBean.isUser}</if> 
     <to-view-id>/clients.xhtml</to-view-id> 
     </navigation-case> 

мне нужно VeiwHandler или что-то неправильно с лицом-config.xml ли?

ответ

0

Ну, очевидно, это не сработает, потому что вы на самом деле не перешли с /login.xhtml на номер /clients.xhtml. Для того, чтобы правило навигации было оценено, вам нужно фактически находиться на login.xhtml, а затем перемещаться с помощью элемента управления на этой странице до clients.xhtml.

Навигационные шкафы охватывают определенные навигационные случаи, то есть логику if-then-else. Таким образом, прямолинейный результат полностью устраняет логику навигации. Вот почему вам лучше выполнять проверку в пункте назначения. Что-то вроде следующего, на основе <f:event name="preRenderView"/> попробовать следующее на clients.xhtml:

  1. Добавьте следующие строки в clients.xhtml. Он предусматривает, что метод checkValidUser

    <f:metadata> 
        <f:event type="preRenderView" listener="#{myBean.checkValidUser}"> 
    </f:metadata> 
    
  2. В вашем бэк-боба, добавьте следующий

    @ManagedProperty("#{userBean}") 
    UserBean theUserBean; //this injects the UserBean into the destination bean. I'm assuming UserBean is a SessionScoped bean here 
    
    public void checkValidUser(){ 
        if(userBean.isUser==false){ 
         throw new ValidationException("not a valid user"); 
        } 
    } 
    

В качестве альтернативы, вы можете просто добавить @PostConstruct аннотацию к checkValidUser и игнорировать (1) в целом. Он достигнет в основном того же эффекта, checkValidUser будет запущен сразу после создания экземпляра bean-компонента. faces-config.xml основанный на навигации подход, IMO неявно ошибочен и оптимистичен, потому что, поскольку вы можете видеть, что слишком легко обходить и разорвать ваше приложение

+0

Спасибо. Оно работает. – Foontik

+0

@Foontik, добро пожаловать. Примите ответ, чтобы подтвердить, что моя рекомендация решила проблему. Также [см. Как работает прием ответа] (http://stackoverflow.com/faq#howtoask) – kolossus

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