2012-07-26 102 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