2012-07-26 104 views
0

我有2個組分(選擇和inputText的),其中的值是依賴於彼此。例如,如果選擇「選項1」,則inputText必須是數字。使用JSF結合+在同一組件中顯示的消息驗證兩次

以我豆我已經添加的屬性2層的組件結合和驗證方法,而在我的jsp已添加「驗證」和「綁定」屬性來選擇和「結合」到的inputText。

我用結合得到兩種成分的驗證提交的值。

這是正確的方法嗎?是否有替代方法來獲取提交的值?

這樣做的結果是被示出重複的消息。如果我從select中刪除綁定屬性,那麼它按預期工作,但我無法獲取選定的值,而是使用緩存值(會話中的bean值)。

在此先感謝。

aalmero

代碼:

<p:selectOneMenu 
value="# {deploymentRequestViewBean.deploymentRequestDTO.deploymentRequest.requestLevel}" 
id="requestLevel" required="true" label="requestLevel" 
validator="#{deploymentRequestViewBean.validateRequestDate}"> 
<p:ajax listener="#{deploymentRequestViewBean.processRequestLevelValueChanged}" 
binding="#{deploymentRequestViewBean.requestLevelSelectOne}"/> 
<f:selectItem itemValue="" itemLabel="Select One" /> 
<f:selectItem itemValue="DEV" itemLabel="DEV" /> 
<f:selectItem itemValue="QUA" itemLabel="QUA" /> 
<f:selectItem itemValue="PRD" itemLabel="PRD" /> 
</p:selectOneMenu> 

<p:calendar 
value="#{deploymentRequestViewBean.deploymentRequestDTO.deploymentRequest.deployDate}" 
id="deployDate" required="true" label="deployDate" showOn="button" pattern="yyyy- MM-dd" binding="#{deploymentRequestViewBean.requestDateInput}"/> 
<p:spacer width="10" height="10" /> 

//for component-binding 
private UISelectOne requestLevelSelectOne; 
private UIInput requestDateInput; 


//validation method 
public void validateRequestDate(FacesContext facesContext, 
    UIComponent component, Object newValue){ 

//get the current value of select; 
requestLevelSelectOne.getSubmittedValue(); 
//get the current vallue of input; 
requestDateInput.getSubmittedValue() 

if(not valid combination){ 
      facesContext.addMessage(requestDateInput.getClientId(facesContext), new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", selectedLevel + " deployment request requires at least 2 days.")); 
     throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "Deployment date must be at least 2 days.")); 
} 
} 
+0

向我們展示一些代碼,請.. – Catfish 2012-07-26 20:36:35

回答

0

您可以通過選擇組件綁定一個隱藏的組件值使用黑客繞過。在你的「平變化」的方法<h:selectOneMenu>您可以在服務器中設置這個隱藏組件的價值,並獲取值:

<h:form id="myForm"> 
    <h:selectOneMenu id="cmbOptions" 
     onchange="document.getElementById('myForm:hidSelectOption').value=this.value"> 
     <f:selectItem itemLabel="Option 1" itemValue="1" /> 
     <f:selectItem itemLabel="Option 2" itemValue="2" /> 
     <f:selectItem itemLabel="Option 3" itemValue="3" /> 
    </h:selectOneMenu> 
    <h:inputHidden id="hidSelectOption" value="#{bean.selectedOption}" /> 
    <h:commandButton value="Click me" action="#{bean.someAction}" /> 
</h:form> 

管理bean

@RequestScope 
@ManagedBean 
public class Bean { 
    private String selectedOption; 
    //getters and setters... 
    public Bean() { 
    } 

    public void someAction() { 
     //showing the actual value of the hidden component... 
     //remember that you should use a logger, this is a basic example 
     System.out.println(selectedOption); 
    } 
} 
+0

我已經嘗試了上述解決方案,但檢索的值是模型值。我希望在更新模型之前的驗證階段獲取這些值。 – aalmero 2012-07-27 16:09:18

+0

您可以將驗證應用於隱藏的組件值。 – 2012-07-27 16:12:11