更新(启用/禁用)<p:toolbar> </p:toolbar>中的按钮

时间:2012-10-23 07:37:14

标签: java-ee jsf-2 primefaces

我的<p:toolBar>包含<p:commandButton>
但是这个工具栏没有放在表格中,因为我正在使用模板
这些按钮正在从托管bean执行方法 方法正确执行,他们正在更新表格
当我想通过点击其中一个来启用和禁用按钮时,这不起作用

示例:

<p:layout id="layout">  
    <p:layoutUnit position="west">  
      <p:toolbar>  
        <p:toolbarGroup align="left">  
           <p:commandButton type="button" value="New" icon="ui-icon-document" />  
           <p:commandButton type="button" value="Open" actionListener="#{bean.anyMethod}" update="frm"/>  
        </p:toolbarGroup>   
      </p:toolbar>    
    </p:layoutUnit>  

    <p:layoutUnit position="center">  
       <h:form id="frm">
         contents of h:form <p:inputText> and <p:outputText> componenets
       </h:form>
    </p:layoutUnit>  
</p:layout> 

我的问题是我的<p:toolbar>不在表单中,点击打开按钮时, actionListener 正在运行,而<h:form id="frm">是更新
但是如果我想点击新按钮来启用/禁用打开按钮 我不能将<p:toolBar>放在表单中,因为我的打开按钮正在更新<h:form id="frm">,如果<p:toolbar>放在表单中,那么 update =“frm”将给出一个例外,<h:form id="frm">无法从工具栏表单中引用 请帮助解决我的问题

1 个答案:

答案 0 :(得分:0)

如果我理解正确您想要在单击打开按钮时禁用按钮。

您无需将工具栏放入表单,也可以通过JavaScript禁用该按钮:

<p:commandButton type="button" value="New" 
                 icon="ui-icon-document" 
                 widgetVar="disablethis"/>  
<p:commandButton type="button" value="Open" 
                 actionListener="#{bean.anyMethod}" update=":frm"
                 onclick="disablethis.disable()"/>

同时尝试在:frm中使用update引用您的表单。

您还应考虑根据您的要求更改onclick操作:

  • 的OnStart

客户端回调在ajax请求开始之前执行。

  • 的onclick

单击按钮时执行的客户端回调。

  • 的onSuccess

当ajax请求成功时执行客户端回调。

  • 的onComplete

当ajax请求完成时执行的客户端回调。

修改

如果你想在没有显式JavaScript的情况下解决这个问题,你需要在你的支持bean中有一个标志(正如你已经发现的那样),指示是否禁用了打开按钮。然后调用您的支持bean的anyMethod(将按照您的描述将该标志置于内部),最后更新 Open 按钮:

<p:commandButton value="New" action="#{bean.anyMethod}" 
                 icon="ui-icon-document" update="button1"/>  
<p:commandButton id="button1" value="Open" type="button"
                 disabled="#{bean.disabled}"/>

在您的支持bean中使用适当的getter / setter,并在anyMethod中设置标记:

private boolean disabled;

public boolean isDisabled() {
    return disabled;
}

public void setDisabled(boolean disabled) {
    this.disabled = disabled;
}

public void anyMethod() {
    if (disabled) {
        disabled = false;
    } else {
        disabled = true;
    }
}