JSF中的消息处理的一点补充说明

首先上后端消息处理的一段代码:

1
FacesContext.getCurrentInstance().addMessage("form", new FacesMessage(FacesMessage.SEVERITY_ERROR, "这里是消息","这里是消息明细"));

这里有三个参数,第一个引号的地方应该填message标签for属性的内容,记住不要填ID,我没看过源码,但是我猜测这个消息应该是发给一个UI组件,然后由组件来派发消息的, FacesMessage 里面后面两个参数一个是消息内容,一个是消息明细说明(这个显示与否是由showDetail=”true”来决定的 ),好了,说完这个再上一段代码

1
2
3
4
5
6
7
8
9
10
11
<h:body>
<p:messages/>
<h:form id="form">
<p:message for="form"/>
<p:messages/>
<h:outputLabel for="test" value="测试" />
<p:inputText id="test" label="测试"></p:inputText>
<p:message for="test"/>
<p:commandButton type="submit" action="#{test.test}" update="form"/>
</h:form>
</h:body>

看看这段代码,比较有意思,首先说说,这里面有两个,一个实在form外面,一个是在form里面,当submit的时候后端如果有消息发出来,比如

1
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "这里是消息",null));

将会是什么情况呢?
试试看,结果是form外的message没有反应,而form内的倒是打印出了消息.
还有一点要说明的就是<p:messages/>这个是会打印出form里面所有的消息,也就是说<p:message for="test"/><p:message for="form"/>打印出来的消息都会在<p:messages/>里面也打印出一份,有点冒泡的味道,也许实际实现就是冒泡的(没看源码,只是猜测,错了别拍我).
接下来是说说<p:message for="form"/>这个,这个for属性很有用,在讲addMessage方法的时候就说过第一个参数,和这个参数是对应的,这样消息就可以打印到你需要地方了.
最后就是消息的级别,这个请参考google,我不便转发,嘿嘿

坚持原创技术分享,您的支持将鼓励我继续创作!