2013-03-30 2 views
0

идея что-то вроде этого:возможно, в перехватчике cdi после проверки, перенаправить пользователя на другую страницу/метод/действие (jsf2) и отправить сообщение?

@PSEUDO_CODE

@AroundInvoke

public Object manage(InvocationContext ic) throws Exception { 

    Object object = getTarget(); 
      ... 
      if(businessValidation(object).equals("fail")){ 
     return <ERROR MESSAGE + REDIRECT> 
    } 
    return ic.proceed(); 
} 

любая помощь, если будет понятно.

заранее спасибо

ответ

0

Бросьте специфический/специальное исключение и установить конкретный <error-page> для этого.

E.g.

if (businessValidationFailed) { 
    throw new BusinessValidationException(message); 
} 

с в web.xml

<error-page> 
    <exception-type>com.example.BusinessValidationException</exception-type> 
    <location>/WEB-INF/errorpages/businessvalidationfailed.xhtml</location> 
</error-page> 

Обратите внимание, что вам нужен обработчик исключений, когда вы хотите, чтобы справиться с этим по запросу AJAX, а также и что вам нужен пользовательский сервлет фильтр для того, чтобы разворачивать исключение Faces или EL, которое может быть автоматически обернуто JSF или EL. Библиотека утилиты JSF OmniFaces предлагает решение для обоих.


Unrelated для конкретной задачи, бизнес-проверки в JSF, как правило, выполняется с использованием JSF Validator, а не Java EE Interceptor.

+0

спасибо, что помогает. давая попытку сопоставления страницы jsf validator и/или web.xml. –

0

эта альтернатива также работает, и это именно то, что я хотел

@AroundInvoke 
public Object intercept(InvocationContext ic) throws Exception { 

    BaseBean<? extends BaseEntity> bean = (BaseBean<?>)ic.getTarget(); 
    RealmEnum realm = bean.getRealm(); 
    ActionEnum action = ic.getMethod().getAnnotation(AccessControl.class).action(); 
    if(!checkAuth(realm, action)){ 
     return bean.getClass().getMethod("cancel").invoke(bean); 
    } 
    return ic.proceed(); 
} 

здесь вы можете разорвать цепь метод и вызывать то, что вы хотите.

return bean.getClass(). GetMethod ("cancel"). Invoke (bean);

во время отладки в затмении, попробуйте проверить, что этот «ic.proceed()» возвращался, а метод в моем компоненте был выполнен. Интересно, что он возвращает «выполнение метода». позвольте мне попробовать это и ... =)

У меня также были проблемы с инъекцией зарегистрированного пользователя. «нормальный путь» не работал, если у вас есть такая же проблема, пытаясь впрыснуть то, что вам нужно, попробуйте следующее:

@Inject @LoggedUser Экземпляр зарегистрированUser;

жаль, это было переведено на английский с помощью Google, надеюсь, вы получите идею =)

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

  • Нет связанных вопросов^_^