2014-02-20 88 views
0

我试图表现出primefaces内的每一行的错误消息的每一行错误信息的数据表 这里是我的XHTML,我删除了一些标签和一些JavaScript函数为清晰起见,省略Primefaces数据表

<f:view> 
    <h:form id="mainEditForm"> 
    <!-- <p:messages id="messages" showDetail="true" autoUpdate="true"    closable="true" /> --> 
     <p:dataTable id="configTable" 
     value="#{favoriteReportsQueries.myFavoriteReportsQueriesPreferences}" 
     var="repList" 
     selection="#{favoriteReportsQueries.selectedFavoriteReportsQueries}" 
     rowKey="#{repList.reportFavoriteName}"> 
     <p:column headerText="Report/Query"> 
      <h:selectOneMenu id="reportQuery" value="#{repList.reportURL} onchange="submit();" update="reportGivenName"> 
      <f:valueChangeListener type="cmecf.ui.favoritereports.validator.CustomNameValueChangeListener" /> 
      <f:selectItems 
       value="#{favoriteReportsQueries.applicationReportsAndQueries}" 
       var="appRepList" itemValue="#{appRepList.value}" 
       itemLabel="#{appRepList.label}" /> 

      </h:selectOneMenu> 
     </p:column> 
     **<p:column headerText="Custom Name"> 
      <p:inputText id="reportGivenName" 
      value="#{repList.reportFavoriteName}" size="50"/> 
      <f:validator validatorId="cmecf.favoritereports.CustomValidator" for="reportGivenName"/> 

      <p:message for="reportGivenName"/> 

     </p:column>** 

     <p:column style="width:10px;"> 
     <f:facet name="header"> 
      Delete 

     </f:facet> 

     <p:selectBooleanCheckbox id="deleteId" 
      styleClass="selectBooleanCheckbox" 
      value="#{repList.delete}"> 
      <p:ajax event="valueChange" process="@this"></p:ajax> 
     </p:selectBooleanCheckbox> 
     </p:column> 




     </p:dataTable> 
     <h:panelGrid columns="7"> 
     <p:column> 
      <p:commandButton id="savePrefs" 
      action="#{favoriteReportsQueries.storeReportsPreferences}" 
      oncomplete="resizeiFrame()" 
      value="Save" ajax="false" /> 
     </p:column> 
     <p:column></p:column> 
     <p:column> 
      <p:commandLink value="Add New" 
      action="#{favoriteReportsQueries.addNewRow}" 
      oncomplete="resizeiFrame()" 
      update="configTable" /> 
     </p:column> 
     <p:spacer width="2px"></p:spacer> 
     <p:column> 
      <p:commandLink type="reset" value="Clear" 
      action="#{favoriteReportsQueries.restorePreferences}" 
      oncomplete="resizeiFrame()" 
      update="configTable" ajax="false" /> 
     </p:column> 
     <p:column></p:column> 
     <p:column> 
      <p:commandLink value="Cancel" 
      action="#{favoriteReportsQueries.cancel}" 
      ajax="false" /> 
     </p:column> 

     </h:panelGrid> 
    </h:form> 

    </f:view> 

我实现了刚刚返回一条错误消息验证

import javax.faces.application.FacesMessage; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.validator.FacesValidator; 
import javax.faces.validator.Validator; 
import javax.faces.validator.ValidatorException; 

@FacesValidator("cmecf.favoritereports.CustomValidator") 
public class CustomNameValidator implements Validator{ 

    @Override 
    public void validate(FacesContext context, UIComponent component, 
      Object value) throws ValidatorException { 
     FacesMessage msg = 
       new FacesMessage("Name already exists", 
         "Invalid name"); 
      msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
      throw new ValidatorException(msg); 


    } 



    } 

当我运行这个程序,我收到此错误

<f:validator> Parent not composite component or an instance of EditableValueHolder: [email protected] 

在此先感谢 西

回答

0

试试这个..

<p:inputText id="reportGivenName" 
      value="#{repList.reportFavoriteName}" size="50"> 
      <f:validator validatorId="cmecf.favoritereports.CustomValidator" /> 
</p:inputText>