2014-07-15 3 views
1

p:cellEditor의 한 열에 p:inputText 필드가있는 PrimeFaces p:dataTable이 있습니다.Primefaces cellEditor required inputText

이 inputText가 필요하지만 required = "true"로 설정하고 입력을 빈 상태로두면 아무런 메시지도 표시되지 않습니다. 어쨌든 위 양식을 포함한 양식이 제출됩니다.

<h:form id="my-form"> 
      <p:dataTable var="dataItem" rowIndexVar="rowIndex" value="#{backingBean.dataList}" draggableRows="true" editable="true" editMode="cell"> 
        <p:ajax event="rowReorder" update="@form"/> 

         <p:column headerText="Order Position"> 
          <h:outputText value="#{rowIndex+1}" /> 
         </p:column> 
         <p:column headerText="Data Name"> 
          <h:outputText value="#{dataItem.name}" /> 
         </p:column> 

         <p:column headerText="Data Value"> 
          <p:cellEditor> 
           <f:facet name="output"><h:outputText value="#{dataItem.value}" /></f:facet> 
           <f:facet name="input"><p:inputText required="true" requiredMessage="Please insert a value" id="valueInput" value="#{dataItem.value}" style="width:100%"/></f:facet> 
          </p:cellEditor> 
         </p:column> 
       </p:dataTable> 
      <div> 
       <h:commandLink action="#{backingBean.submit()}">Submit</h:commandLink> 
      </div> 
      <h:messages id="validateMsg" /> 
     </h:form> 

제출 h:commandLink는 Ajax 호출되지 않습니다 :

여기에 내 코드, 특히 <p:column headerText="Data Value"> 부분입니다. 그러나 필자의 의견으로는 필수 필드 인 p:inputText이 비어있는 한 양식을 제출해서는 안됩니다.

p:inputText 대신 h:inputText을 사용해 보았는데 같은 결과가 나타납니다.

예상 한대로 작동하는 p:dataTable 외부에 필요한 h:inputText을 추가하려고했는데 양식이 비어있는 한 양식을 제출할 수 없습니다.

p:inputText 필드를 p:cellEdit에 입력하는 방법에 대한 아이디어가 있으십니까?

+0

확실하지하지만

<h:form id="my-form"> <p:dataTable var="dataItem" rowIndexVar="rowIndex" value="#{backingBean.dataList}" draggableRows="true" editable="true" editMode="cell"> <p:ajax event="cellEdit" update=":#{p:component('submit-button-group')}" /> <p:column> ... </p:column> </p:dataTable> <div> <h:panelGroup id="submit-button-group"> <h:commandLink action="#{backingBean.submit()}" rendered="#{backingBean.isAllValuesSet()}">Submit</h:commandLink> </h:panelGroup> </div> </h:form> 

: 여기에 내가이 일을 결국 방법 rowged "update =": growl "/> (": growl "을 메시지 구성 요소로 대체하십시오.) –

+0

또한'@ form'과 일치하지 않는 결과가 있습니다. '@ this'를 사용하거나'p : ajax'에있는 테이블 id를 직접 참조하십시오. – kolossus

+0

답장을 보내 주셔서 감사합니다! @form 업데이트를 id 값으로 변경해보고 Ajax 이벤트 'cellEdit'도 사용했지만 작동하지 않습니다. 필수 필드가 비어 있긴하지만 표시되지 않은 메시지 외에 더 나쁜 것은 제출되는 양식입니다. – Vincent

답변

0

rion18의 제안에 따르면 모든 값이 설정되면 내 백킹 빈을 검사 할 것입니다. 모든 값이 설정된 경우에만 제출 단추가 표시됩니다. "= 아약스 이벤트 :

public boolean isAllValuesSet(){ 
    for(DataItem item:dataItems){ 
     if(item.getValue()==null || item.getValue().isEmpty()){ 
      return false; 
     } 
    } 
    return true; 
} 
관련 문제