如何在通过 OmniFaces Messages 添加的面孔消息中显示撇号 '#add

How to display apostrophe ' in faces message added via OmniFaces Messages#add

我正在使用 p:messages 在 primefaces XHTML 页面中显示错误编号 UI。 我想像员工一样显示字符串。当我尝试使用 OmniFaces Messages 实用程序时,它没有显示。有关更多详细信息,请查看下面的代码。

XHTML:

<p:messages id="globalMessages" autoUpdate="false" closable="true"
                escape="true" showDetail="true"/>

豆子:

Messages.add(FacesMessage.SEVERITY_ERROR, "global", "employee's");

演示文稿:

当我使用普通 FacesContext#addMessage():

时有效
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "PrimeFaces Rocks employ's"));

演示文稿:

但是我必须使用Messages.add(FacesMessage.SEVERITY_ERROR, "global", "employee's");

这是怎么造成的,如何在消息中显示单引号?

javadoc 所述,OmniFaces Messages 的默认解析器使用 MessageFormat API 来格式化消息,就像 <h:outputFormat> 和资源一样捆绑工作。

MessageFormat API中,单引号是一个特殊字符,如果要按原样表示,需要用另一个转义。

Messages.add(FacesMessage.SEVERITY_ERROR, "global", "employee''s");

替代方法是使用弯引号。

Messages.add(FacesMessage.SEVERITY_ERROR, "global", "employee’s");

或者注册一个不处理消息的自定义消息解析器。

Messages.setResolver(new Messages.Resolver() {
     public String getMessage(String message, Object... params) {
         return message;
     }
 });

但是你不能再使用消息参数了。


更新:我刚刚改进了 Messages 实用程序,如果首先没有消息参数,则不执行任何格式化。您可以在 this commit. It's available in today's latest 2.5-SNAPSHOT.

中看到增强功能