0

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

该按钮应在第一页加载时禁用,并且仅在所有必填字段都是具有值的字段时启用。

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

此外,如果仅在所有评估为 truecommandButton时才启用,那就太好了。validators

使用 PF 3.2

编辑

  • 我的意思是最好的方法,它应该只在客户端进行评估
4

2 回答 2

2

这是不可能的,原因有二。

  1. 对于客户端验证,您肯定需要 javascript。
  2. 组件的required属性只存储在服务器端,客户端不知道默认需要哪些字段。

如果不使用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}" />

在 bean 中:

  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在初始加载时加载禁用,并且只有在文本字段中输入任何值时才会启用。

于 2012-08-03T17:44:42.007 回答
1

这是可能的,但我几乎不会称其为“最佳方式”。

您需要为ajax每个字段上的更改事件提供一个标签。每个字段都必须immediate跳过初始验证,并且process需要设置为@this.

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

这些ajax标签将需要render @this以及commandButton.

但即便如此,实际上还是有很多 Javascript 代码在运行,没有一个是你必须直接编写的。

于 2012-08-03T17:46:54.640 回答