我的<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">
无法从工具栏表单中引用
请帮助解决我的问题
答案 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
操作:
客户端回调在ajax请求开始之前执行。
单击按钮时执行的客户端回调。
当ajax请求成功时执行客户端回调。
当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;
}
}