2013-01-16 1 views
2

최근에 내 애플리케이션을 JSF 2.1.7 및 PrimeFaces 3.4.2로 업데이트했습니다. 아래 대화 상자에서 새 그룹을 추가 할 때 새 그룹을 저장하기 전에 "이름 크기는 1 - 40 사이 여야합니다" 유효성 검사 오류가 발생합니다. 그것은 피커의 추가 버튼을 클릭하면 발생합니다. 유효성 검사가 실패했기 때문에이 메시지가 표시됨을 이해합니다. p : commandButton에 immediate=true을 추가하면 유효성 검사 오류가 표시되지 않습니다. 유효성 검사를 실행 한 원인을 알 수 없습니다.JSF/PrimeFaces 대화 상자에서 Javabean 유효성 검사 오류가 발생했습니다.

<h:form id="formg" prependId="false"> 
    <!-- messages --> 
    <p:growl id="msgsg" showDetail="true" /> 

    <!-- data table --> 
    <ui:include src="/WEB-INF/flows/groupsTable.xhtml" /> 

    <p:separator /> 

    <!-- bottom tool bar --> 
    <ui:include src="/WEB-INF/flows/groupsToolBar.xhtml" /> 

    <!-- preview, edit dialog --> 
    <ui:include src="/WEB-INF/flows/groupsDialog.xhtml" /> 
</h:form> 

<p:dialog id="dialogg" header="#{groupsBean.dialogTitle}" 
    widgetVar="groupsDialog" dynamic="true" resizable="false" width="800" 
height="600" showEffect="fade" hideEffect="fade" modal="true"> 
    <p:ajax event="close" listener="#{groupsBean.refresh}" 
     immediate="true" update=":formg" global="false" process="@this" /> 

    <p:tabView id="tabPicker"> 
     <p:tab title="General"> 
      <h:panelGrid id="displayg" columns="2"> 
       <h:outputText value="#Group name*:" /> 
       <p:inputText value="#{groupsBean.selectedGroup.name}" size="40" 
        readonly="#{!groupsBean.updatable}" maxlength="40" /> 
      </h:panelGrid> 
     </p:tab> 
     <p:tab title="Members"> 
      <ui:include src="/WEB-INF/custom/picker.xhtml"> 
       ... some params passed to picker 
      </ui:include> 
     </p:tab> 
    </p:tabView> 
</p:dialog> 

피커 <p:password> 유사하며, 두 개의 페이지로 구성된다 : 데이터 테이블 구성 요소 및 이들 간의 4 개 버튼. 단추는 h : panelGrid와 함께 그룹화됩니다. 버튼 속성도 비슷합니다.

<p:outputPanel autoUpdate="true"> 
    <p:commandButton actionListener="#{eval.evaluateAsMethod(pickerAdd)}" 
    update="source, target, #{messages}" immediate="true" 
    disabled="#{pickerSourceDisabled}" 
    icon="ui-icon ui-icon-arrowthick-1-s" /> 
</p:outputPanel> 

소스, 두 datatables의 식별자이다 대상 : 여기 버튼 샘플 코드이다. pickerAdd은 값이 groupsBean.picker.add 인 param으로 전달됩니다. 테이블에는 FooDomain 오브젝트가 들어 있습니다.

public class FooDomain implements Serializable { 
    ... 
    @NotNull 
    @Size(min = 1, max = 40) 
    @Column(name = "NAME") 
    private String name; 
    ... 
} 

답변

5

PrimeFaces에게 기본적으로 <p:commandButton> 프로세스 전체 양식을 (process="@form",에서와 같이), 모든 검증 기본 트리거에 의해 것 때문에. 속성에 대한 @Size 제한에서 유효성 검사 오류가 발생했습니다. 버튼 자체의 작업 만 처리하려면 process="@this"을 추가해야합니다.

<p:commandButton ... process="@this" /> 

immediate="true" 또한이를 해결하기 위해 사용될 수 있지만, 이것은 내부적으로 약간 다른 동작 : 전체 형태는 아직 처리되지만 액션 APPLY_REQUEST_VALUES 단계 대신 INVOKE_ACTION 상에 호출된다. immediate="true" 세트가있는 입력 구성 요소 만 처리되고 나머지는 건너 뜁니다.

+0

엄청난 양의 사용자가 있습니다. – Seitaridis

+0

당신은 환영합니다 :) – BalusC