我今天和一位同事花了三个小时试图弄清楚为什么这里的其他答案不起作用。原来我们的系统需要 HTML 文件来包含来自外部文件的 CSS 和 JS。不带标签!所以这对我们有用。对于我们的项目,我们在主目录中有一个名为“css”的文件夹和一个名为“js”的文件夹。
下面是HTML正文的相关代码:
<h:outputStylesheet name="css/styles.css" />
<h:outputScript library="js" name="growlColour.js" />
<p:growl id="growlC" autoUpdate="true" showDetail="true" sticky="true" />
<p:commandButton id="buttonC" action="#{bean.methodC}" oncomplete="growlColour();" />
支持java bean的methodC实例化一个咆哮消息:
public void methodC() {
String x = "message goes here";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success", x));
}
显然,您可以更改严重性,这将根据以下代码更改颜色。咆哮消息由 JS 修改,将 CSS 类应用于正确的咆哮消息对象。
styles.css:
.g-info {
background-color: green;
}
.g-warn {
background-color: red;
}
.g-error {
background-color: red;
}
.g-fatal {
background-color: black;
}
growlColour.js:
function growlColour() {
$(".ui-growl-image-info").parent().parent().addClass("g-info");
$(".ui-growl-image-warn").parent().parent().addClass("g-warn");
$(".ui-growl-image-error").parent().parent().addClass("g-error");
$(".ui-growl-image-fatal").parent().parent().addClass("g-fatal");
}
我认为这是最简单、最可靠的方法。
编辑:
有时 oncomplete 不起作用,例如如果 ajax 设置为 false。对于所有情况,似乎最好的解决方案是不要通过 JSF 调用 JS。相反,在支持 bean 中创建消息后立即添加这行代码:
public void methodC() {
String x = "message goes here";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success", x));
RequestContext.getCurrentInstance().execute("growlColour();");
}