Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 无法禁用<;p:commandButton>;通过ajax_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 无法禁用<;p:commandButton>;通过ajax

Jsf 无法禁用<;p:commandButton>;通过ajax,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,如果输入文本中没有值,我想禁用该按钮,如下所示: <p:autoComplete id="ac" value="#{bean.selectedNet}" completeMethod="#{bean.complete}" minQueryLength="0" size="3"> <p:ajax event="itemSelect" update="genButton" listener="#{bean.handleNetChange}"/>

如果输入文本中没有值,我想禁用该按钮,如下所示:

<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;
}
public void handleNetChange(){
如果(!StringUtils.isBlank(selectedNet)&&!selectedEntity.isEmpty()){
disableButton=false;
}否则{
disableButton=true;
}
}
公共列表完成(字符串查询){
列表结果=新建ArrayList();
if(StringUtils.isBlank(查询)){
selectedNet=查询;
disableButton=true;
}否则{
....
}
返回结果;
}
虽然itemSelect事件工作正常,但第二个却没有。我可以在bean中看到对complete方法的调用,但是按钮没有更新


有什么建议吗?

似乎你不能仅仅用
强制更新。 我会尝试直接从
bean
更新
按钮

因为您使用的是primefaces,所以可以使用
RequestContext
;尝试将此行添加到您的
complete
方法中:

RequestContext.getCurrentInstance().addPartialUpdateTarget("genButton");
如果在包装
表单上未使用
prependId=“false”
,则可能需要指定
按钮的完整路径,例如:

RequestContext.getCurrentInstance().addPartialUpdateTarget("fooForm:genButton");

如果要使用“禁用”,请不要在“命令”按钮上使用“渲染属性”

<p:commandButton id="buttonId"  
actionListener="#{controller.function}"
value="#{controller.label}" 
disabled="#{controller.disableButton}" rendered="#{controller.renderButton}"  />


删除渲染后,按钮将被禁用,没有任何问题。

我在没有更新的情况下尝试过它,它确实对我有效。它禁用了按钮。