输入验证受到干扰时,请使用JSF禁用按钮

时间:2018-09-04 15:24:34

标签: validation jsf

我在Primefaces 5.3中使用了JSF,在启用/禁用命令按钮时遇到了麻烦。

首先,我输入以下内容:

<h:inputText id="series" value="#{bean.series}"
    required="false" converterMessage="Please enter three digits" >
    <f:validateRegex pattern="[0-9]{3}" />
    <p:ajax event="keyup" update="download"/>
    </h:inputText>

在后备bean中,该字段是一个整数

private Integer series;

我的目标是在输入不为空时启用/禁用“下载”按钮。我不在乎它是否无效,仅当它不包含任何字符时。

<h:commandButton id="download" value="Download"
action="#{bean.download}" 
disabled="#{empty bean.series}"/>

更新事件是在keyup上触发的,但是由于验证,后备bean中的属性“ series”始终为空。

您能帮我解决一个问题吗? 谢谢

1 个答案:

答案 0 :(得分:0)

首先让我指出,要求是不合逻辑的,因为如果该值无效,则您不能(至少在没有其他更改的情况下)无法通过按钮提交表单。

但是,如果您确实想要这样做,请使用Disable/Enable h:commandButton on validation fails/ is ok

中的操作
<h:inputText id="series" value="#{bean.series}"
    required="false" converterMessage="Please enter three digits" binding="#{series}">
   <f:validateRegex pattern="[0-9]{3}" />
   <p:ajax event="keyup" update="download"/>
</h:inputText>

<h:commandButton id="download" value="Download" 
   action="#{bean.download}"  
   disabled="#{ ... EL using 'empty bean.series' and 'series.valid' ..." />

必须由您定义EL,因为您最了解空/不空和有效/无效的哪种组合应使按钮禁用