【发布时间】:2012-08-14 15:34:13
【问题描述】:
我有以下 commandButton 操作方法处理程序:
public String reject()
{
//Do something
addMessage(null, "rejectAmountInvalid", FacesMessage.SEVERITY_ERROR);
redirectToPortlet("/xxx/inbox?source=pendingActions#pendingApproval");
}
public static void addMessage(String clientId, String key, Severity level, Object... objArr)
{
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = null;
String msg = getTextFromResourceBundle(key);
if (objArr != null && objArr.length > 0)
msg = MessageFormat.format(msg, objArr);
message = new FacesMessage(msg);
message.setSeverity(level);
context.addMessage(clientId, message);
}
public static void redirectToPortlet(String urlToRedirect)
{
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
try
{
PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute("THEME_DISPLAY");
String portalURL = themeDisplay.getPortalURL();
String redirect = portalURL + urlToRedirect;
externalContext.redirect(redirect);
}
catch (Throwable e)
{
logger.log("Exception in redirectToPortlet to the URL: " + urlToRedirect, VLevel.ERROR, e);
}
}
当页面重定向到“/xxx/inbox?source=pendingActions#pendingApproval”时,我添加的错误信息丢失了。有没有办法在 JSF 2.1 中保留错误消息?
谢谢 斯里
【问题讨论】:
-
小提示,我宁愿用新消息重新抛出异常,也不愿在可能发生的每个小地方记录它们。如果函数声明禁止异常转发,您总是可以重新抛出 RuntimeException。这样,您只需注册一个全局异常处理程序即可记录所有消息。
标签: jsf