我想在xhtml中显示异常消息。执行是在拦截器中生成的。
拦截班:
@Logable
@Interceptor
public class LoggingInterceptor
{
@AroundInvoke
public Object log(InvocationContext ctx)
throws Exception {
if (some logic)
FacesContext.getCurrentInstance().addMessage("newBandForm:ABCD", new FacesMessage(FacesMessage.SEVERITY_ERROR, "hklfhfhsf", "hklfhfhsf"));
throw new Exception("MNOP");
return ctx.proceed();
}
Action Bean Class
@Named("bcontroller")
@RequestScoped
public class BandListController
{
@Logable
public void save()
{
}
}
我想在xhtml p:message
中显示异常<h:form id="newBandForm">
<p:messages id="ABCD" autoUpdate="false" closable="true" showDetail="false" escape="false"/>
</h:form>
如果我在Action“save()”本身中编写以下行,并删除Interceptor,则会显示消息。
FacesContext.getCurrentInstance().addMessage("newBandForm:ABCD", new FacesMessage(FacesMessage.SEVERITY_ERROR, "hklfhfhsf", "hklfhfhsf"));
似乎异常抛出也会中断JSF组件的生命周期。
谢谢
我有一个xhtml页面,其中包含一个字段(例如:F1)和两个commandButton(例如:C1和C2)。对于C1按钮,F1是强制性的,对于C2,则不是。这是完全可配置的,在bean初始化时,我从数据库中获取数据,对于哪个按钮,哪些字段是必需的。
现在在查找@Logable注释时,我正在调用拦截器方法来根据操作检查数据一致性。如果验证失败,我必须设置p:message(我正在访问FaceContext)。
为什么我这样做?因此,单个注释可以在不更改主要操作代码的情况下启用安全性。
在搜索“JSF中的aop”后,我最终得到了javax“拦截器”。我没有选择在项目中实现spring-aop。
答案 0 :(得分:0)
我对“ctx.proceed()”缺乏了解导致我遇到这些问题。它的作用是“继续拦截链中的下一个拦截器。”如果没有,流量将照常恢复。
(解决方法)更改此类代码可以解决我的问题:
@AroundInvok
public Object log(InvocationContext ctx)
throws Exception {
if (!(some logic))
{
return ctx.proceed();
}
else
{
FacesContext.getCurrentInstance().addMessage("newBandForm:ABCD", new FacesMessage(FacesMessage.SEVERITY_ERROR, "hklfhfhsf", "hklfhfhsf"));
return null;
}
}
现在我没有抛出任何例外。