获取特定组件的验证消息

时间:2014-11-17 15:44:07

标签: validation jsf

  <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。

2 个答案:

答案 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中:

  1. 在给定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;
    
    }
    
  2. 在视图中使用实用程序方法

     <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