如果输入文本中没有值,我想禁用该按钮:
<p:autoComplete id="ac" value="#{bean.selectedNet}"
completeMethod="#{bean.complete}"
minQueryLength="0" size="3">
<p:ajax event="itemSelect" update="genButton" listener="#{bean.handleNetChange}"/>
<p:ajax process="@this" update="genButton" />
</p:autoComplete>
<p:selectManyCheckbox id="en" layout="pageDirection" value="#{bean.selectedEntity}">
<f:selectItems value="#{bean.entityList}"/>
<p:ajax update="genButton" listener="#{bean.handleNetChange}"/>
</p:selectManyCheckbox>
<p:commandButton id="genButton" value="Generate Files"
widgetVar="startButton1"
disabled="#{bean.disableButton}"
actionListener="#{bean.generate}"
onclick="PrimeFaces.monitorDownload(showStatus, hideStatus)"
ajax="false">
<p:fileDownload value="#{bean.streamedContent}"/>
</p:commandButton>
方法:
public void handleNetChange() {
if (!StringUtils.isBlank(selectedNet) && !selectedEntity.isEmpty()) {
disableButton = false;
} else {
disableButton = true;
}
}
public List<String> complete(String query) {
List<String> results = new ArrayList<String>();
if (StringUtils.isBlank(query)) {
selectedNet = query;
disableButton = true;
} else {
....
}
return results;
}
虽然itemSelect事件工作正常,但第二个事件却没有。我可以在bean中看到对complete方法的调用但是按钮没有更新
有任何建议吗?
答案 0 :(得分:2)
好像您不能仅使用<p:ajax process="@this" update="genButton" />
强制更新。
我会尝试直接从button
更新bean
。
由于您使用的是primefaces,因此您可以使用RequestContext
;尝试将此行添加到您的complete
方法:
RequestContext.getCurrentInstance().addPartialUpdateTarget("genButton");
如果您在包裹prependId="false"
上未使用form
,则可能需要指定button
的完整路径,例如:
RequestContext.getCurrentInstance().addPartialUpdateTarget("fooForm:genButton");
答案 1 :(得分:0)
如果要使用disabled,请不要在命令按钮上使用render属性。
<p:commandButton id="buttonId"
actionListener="#{controller.function}"
value="#{controller.label}"
disabled="#{controller.disableButton}" rendered="#{controller.renderButton}" />
删除渲染后,按钮被禁用,没有任何问题。