根据当前表单的必填字段禁用/启用commandButton?

时间:2012-08-03 16:24:56

标签: java jsf primefaces

如果commandButton的字段未填充值,则停用required=true的最佳方法是什么?

首页加载时应禁用该按钮,并且只有在所有必填字段都是包含值的字段时才启用该按钮。

通过最佳方法,我的意思是没有javascript和最小代码: - )

此外,如果commandButton仅在所有validators评估为true时启用,那将会很棒。

使用PF 3.2

修改

  • 通过最佳方法我的意思是,它只应在客户端进行评估

2 个答案:

答案 0 :(得分:2)

由于两个原因,这是不可能的。

  1. 对于客户端验证,您肯定需要javascript。
  2. 组件的required属性仅存储在服务器端,客户端不知道默认情况下需要哪些字段。
  3. 不使用required,您可以在客户端实现此目的,如下所示。 validateContent应包含禁用commandButton

    的逻辑
    <h:inputText value="#{bean.text}" >
        <pe:javascript event="keyup" execute="validateContent();"/>
    </h:inputText>
    

    如果去服务器没问题,那么你可以这样做:

    <h:inputText id="test1" value="#{bean.text}" required="true" immediate="true">
        <f:ajax listener="#{bean.makeDisable()}" render="test2" />
    </h:inputText>
    </h:commandButton id="test2" value="commandButton1" disabled="#{bean.disable}" />
    

    在豆子里:

      private String text;
      private boolean disable;
    
      // setter & getter of text
    
      public boolean isDisable()
      {
        return disable;
      }
    
      public void makeDisable(AjaxBehaviorEvent event)
      {
        if(text == null || text.equals(""))
          this.disable=true;
        else
          this.disable=false;
      }
    

    这基本上会在初始加载时加载commandButton,并且只有在输入文本字段中的任何值时才会启用。

答案 1 :(得分:1)

这是可能的,但我很难称之为“最佳方式”。

您需要为每个字段的变更事件提供ajax标记。每个字段必须immediate才能跳过初始验证,process需要设置为@this

在事件监听器中,您可以检查每个必需字段是否存在值,如果存在,则设置一个布尔字段,用于确定是否禁用了commandButton。

这些ajax代码需要render @this以及commandButton

但即便如此,仍然有很多Javascript正在进行中,只是没有你必须直接写的。