<h:inputText id="myInputText" title="The text from validation message here" style="#{component.valid? '' : 'border-color:red'}" validator="#{MyBean.validate}"
required="true" requiredMessage="required" value="#{MyBean.value} />
<p:message for="myInputText" display="text"/>
由于我想自定义在inputText组件中查找失败的验证,并且我知道可以知道组件是否成功验证,我想知道它是否可行以及我如何获得验证消息,以便将其显示为inputText组件的tittle。
答案 0 :(得分:2)
您计划的问题是单个组件可以排队多个消息。那你打算做什么?出于演示目的,您可以使用
<h:inputText id="myInputText" title="#{facesContext.getMessageList('myInputText').get(0)}" style="#{component.valid? '' : 'border-color:red'}" validator="#{MyBean.validate}" required="true" requiredMessage="required" value="#{MyBean.value} />
编辑:您应该将逻辑移到辅助bean中:
在给定FacesMessage
clientId
列表中提取详细信息的方法
public String getComponentMessageDetail(String clientId){
String detail = null;
FacesContext ctxt = FacesContext.getCurrentInstance();
List<FacesMessage> componentMessages = ctxt.getMessages(clientId);
if(componentMessages != null && componentMessages.isEmpty()==false){
detail = componentMessages.get(0).getDetail(); //returns the detail, from only the first message!
}
return detail;
}
在视图中使用实用程序方法
<h:inputText id="myInputText" title="#{MyBean.getComponentMessageDetail('myInputText'}" style="#{component.valid? '' : 'border-color:red'}" validator="#{MyBean.validate}" required="true" requiredMessage="required" value="#{MyBean.value} />
答案 1 :(得分:0)
这个java方法怎么样
public String getComponentMessageDetail(String cid){
FacesContext ctxt = FacesContext.getCurrentInstance();
Iterator<FacesMessage> cm = ctxt.getMessages(cid);
List<String> msg = new ArrayList<>();
while(cm.hasNext()) {
msg.add(cm.next().getDetail());
}
return String.join(" | ", msg);
}
显示消息缓存中的所有内容?
同样在xhtml中
<h:inputText id="myInputText" title="#{MyBean.getComponentMessageDetail('yourFormId:myInputText'}" style="#{component.valid? '' : 'border-color:red'}" validator="#{MyBean.validate}" required="true" requiredMessage="required" value="#{MyBean.value} />
将form-id的名称放在输入控件的id前面可能很有用。否则消息列表可能没有项目,尽管有一些。
以下是另一种快速显示验证消息的方法:h:messages