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:使用Ajax的multiSelectListbox_Jsf_Jsf 2_Primefaces_Nullpointerexception_Multi Select - Fatal编程技术网

Jsf p:使用Ajax的multiSelectListbox

Jsf p:使用Ajax的multiSelectListbox,jsf,jsf-2,primefaces,nullpointerexception,multi-select,Jsf,Jsf 2,Primefaces,Nullpointerexception,Multi Select,如何将p:multiSelectListbox与ajax事件一起使用?我想在用户选择某个选项时启用该按钮 <p:multiSelectListbox value="#{assignLecturerBacking.lecturerToAssignId}" effect="slide"> <f:selectItems value="#{assignLecturerBacking.lecturerList}"/> <f:ajax event="cl

如何将
p:multiSelectListbox
与ajax事件一起使用?我想在用户选择某个选项时启用该按钮

<p:multiSelectListbox value="#{assignLecturerBacking.lecturerToAssignId}" effect="slide">  
    <f:selectItems value="#{assignLecturerBacking.lecturerList}"/>  
    <f:ajax event="click" render="bt"/>
</p:multiSelectListbox>  

<h:commandButton id="bt" value="#{msg.assignLecturer}" action="#assignLecturerBacking.assignLecturer(true)}"/>
使用
我也会得到
java.lang.NullPointerException

java.lang.NullPointerException
org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.applyAttachedObject(AjaxBehaviorHandler.java:178)
org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.apply(AjaxBehaviorHandler.java:157)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:49)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:58)
org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:294)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:53)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:49)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:58)
org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:294)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:53)
javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:49)
....

p:multiSelectListbox
组件在PrimeFaces 4.0版本中没有任何可用的AJAX事件(我想他们将来会添加一些)

一种可用的替代方法是使用普通JavaScript/jQuery来获得所需的功能性

下面是一个简单的工作示例,我刚刚制作了这个示例,向您展示了如何实现这一点

查看代码:

<h:form id="form">
    <p:multiSelectListbox id="selector" value="#{multiSelectListboxBean.selection}" effect="slide">
        <f:selectItems value="#{multiSelectListboxBean.categories}" />
    </p:multiSelectListbox>

    <h:commandButton id="button" value="Submit" disabled="true" />
    <script>
        $(document).ready(
            function()
            {
                $("#form\\:selector li").click(
                    function()
                    {
                        var data = $(this).attr("data-value");
                        if(data.length > 0)
                        {
                            $("#form\\:button").prop("disabled",false);
                        }
                        else
                        {
                            $("#form\\:button").prop("disabled",true);
                        }
                    }
                );
            }
        );
    </script>
</h:form>
@ManagedBean
@ViewScoped
public class MultiSelectListboxBean
{
    private List<SelectItem> categories;  

    private String selection;  

    @PostConstruct  
    public void init()
    {
        categories = new ArrayList<SelectItem>();
        SelectItemGroup group1 = new SelectItemGroup("Group 1");
        SelectItemGroup group2 = new SelectItemGroup("Group 2");
        SelectItemGroup group3 = new SelectItemGroup("Group 3");
        SelectItemGroup group4 = new SelectItemGroup("Group 4");

        SelectItemGroup group11 = new SelectItemGroup("Group 1.1");
        SelectItemGroup group12 = new SelectItemGroup("Group 1.2");

        SelectItemGroup group21 = new SelectItemGroup("Group 2.1");

        SelectItem option31 = new SelectItem("Option 3.1", "Option 3.1");
        SelectItem option32 = new SelectItem("Option 3.2", "Option 3.2");
        SelectItem option33 = new SelectItem("Option 3.3", "Option 3.3");
        SelectItem option34 = new SelectItem("Option 3.4", "Option 3.4");

        SelectItem option41 = new SelectItem("Option 4.1", "Option 4.1");

        SelectItem option111 = new SelectItem("Option 1.1.1");
        SelectItem option112 = new SelectItem("Option 1.1.2");
        group11.setSelectItems(new SelectItem[]{option111, option112});

        SelectItem option121 = new SelectItem("Option 1.2.1", "Option 1.2.1");
        SelectItem option122 = new SelectItem("Option 1.2.2", "Option 1.2.2");
        SelectItem option123 = new SelectItem("Option 1.2.3", "Option 1.2.3");
        group12.setSelectItems(new SelectItem[]{option121, option122, option123});

        SelectItem option211 = new SelectItem("Option 2.1.1", "Option 2.1.1");
        group21.setSelectItems(new SelectItem[]{option211});

        group1.setSelectItems(new SelectItem[]{group11, group12});
        group2.setSelectItems(new SelectItem[]{group21});
        group3.setSelectItems(new SelectItem[]{option31, option32, option33, option34});
        group4.setSelectItems(new SelectItem[]{option41});

        categories.add(group1);
        categories.add(group2);
        categories.add(group3);
        categories.add(group4);
    }

    public List<SelectItem> getCategories()
    {
        return categories;
    }

    public String getSelection()
    {
        return selection;
    }

    public void setSelection(String selection)
    {
        this.selection = selection;
    }
}

$(文件)。准备好了吗(
函数()
{
$(“#表单\\:选择器li”)。单击(
函数()
{
var data=$(this.attr(“数据值”);
如果(data.length>0)
{
$(“#form\\:button”).prop(“disabled”,false);
}
其他的
{
$(“#form\\:button”).prop(“disabled”,true);
}
}
);
}
);
Bean代码:

<h:form id="form">
    <p:multiSelectListbox id="selector" value="#{multiSelectListboxBean.selection}" effect="slide">
        <f:selectItems value="#{multiSelectListboxBean.categories}" />
    </p:multiSelectListbox>

    <h:commandButton id="button" value="Submit" disabled="true" />
    <script>
        $(document).ready(
            function()
            {
                $("#form\\:selector li").click(
                    function()
                    {
                        var data = $(this).attr("data-value");
                        if(data.length > 0)
                        {
                            $("#form\\:button").prop("disabled",false);
                        }
                        else
                        {
                            $("#form\\:button").prop("disabled",true);
                        }
                    }
                );
            }
        );
    </script>
</h:form>
@ManagedBean
@ViewScoped
public class MultiSelectListboxBean
{
    private List<SelectItem> categories;  

    private String selection;  

    @PostConstruct  
    public void init()
    {
        categories = new ArrayList<SelectItem>();
        SelectItemGroup group1 = new SelectItemGroup("Group 1");
        SelectItemGroup group2 = new SelectItemGroup("Group 2");
        SelectItemGroup group3 = new SelectItemGroup("Group 3");
        SelectItemGroup group4 = new SelectItemGroup("Group 4");

        SelectItemGroup group11 = new SelectItemGroup("Group 1.1");
        SelectItemGroup group12 = new SelectItemGroup("Group 1.2");

        SelectItemGroup group21 = new SelectItemGroup("Group 2.1");

        SelectItem option31 = new SelectItem("Option 3.1", "Option 3.1");
        SelectItem option32 = new SelectItem("Option 3.2", "Option 3.2");
        SelectItem option33 = new SelectItem("Option 3.3", "Option 3.3");
        SelectItem option34 = new SelectItem("Option 3.4", "Option 3.4");

        SelectItem option41 = new SelectItem("Option 4.1", "Option 4.1");

        SelectItem option111 = new SelectItem("Option 1.1.1");
        SelectItem option112 = new SelectItem("Option 1.1.2");
        group11.setSelectItems(new SelectItem[]{option111, option112});

        SelectItem option121 = new SelectItem("Option 1.2.1", "Option 1.2.1");
        SelectItem option122 = new SelectItem("Option 1.2.2", "Option 1.2.2");
        SelectItem option123 = new SelectItem("Option 1.2.3", "Option 1.2.3");
        group12.setSelectItems(new SelectItem[]{option121, option122, option123});

        SelectItem option211 = new SelectItem("Option 2.1.1", "Option 2.1.1");
        group21.setSelectItems(new SelectItem[]{option211});

        group1.setSelectItems(new SelectItem[]{group11, group12});
        group2.setSelectItems(new SelectItem[]{group21});
        group3.setSelectItems(new SelectItem[]{option31, option32, option33, option34});
        group4.setSelectItems(new SelectItem[]{option41});

        categories.add(group1);
        categories.add(group2);
        categories.add(group3);
        categories.add(group4);
    }

    public List<SelectItem> getCategories()
    {
        return categories;
    }

    public String getSelection()
    {
        return selection;
    }

    public void setSelection(String selection)
    {
        this.selection = selection;
    }
}
@ManagedBean
@视域
公共类MultiSelectListboxBean
{
私人名单类别;
私有字符串选择;
@施工后
公共void init()
{
categories=newarraylist();
SelectItemGroup group1=新建SelectItemGroup(“组1”);
SelectItemGroup group2=新建SelectItemGroup(“Group 2”);
SelectItemGroup group3=新建SelectItemGroup(“Group 3”);
SelectItemGroup group4=新建SelectItemGroup(“Group 4”);
SelectItemGroup group11=新建SelectItemGroup(“Group 1.1”);
SelectItemGroup group12=新建SelectItemGroup(“Group 1.2”);
SelectItemGroup Group 21=新建SelectItemGroup(“Group 2.1”);
SelectItem option31=新建SelectItem(“选项3.1”、“选项3.1”);
SelectItem option32=新建SelectItem(“选项3.2”、“选项3.2”);
SelectItem option33=新建SelectItem(“选项3.3”、“选项3.3”);
SelectItem option34=新建SelectItem(“选项3.4”、“选项3.4”);
SelectItem option41=新建SelectItem(“选项4.1”、“选项4.1”);
SelectItem option111=新建SelectItem(“选项1.1.1”);
SelectItem option112=新建SelectItem(“选项1.1.2”);
group11.setSelectItems(新建SelectItem[]{option111,option112});
SelectItem option121=新的SelectItem(“选项1.2.1”、“选项1.2.1”);
SelectItem option122=新建SelectItem(“选项1.2.2”、“选项1.2.2”);
SelectItem option123=新的SelectItem(“选项1.2.3”、“选项1.2.3”);
group12.setSelectItems(新建SelectItem[]{option121,option122,option123});
SelectItem option211=新的SelectItem(“选项2.1.1”、“选项2.1.1”);
group21.setSelectItems(新建SelectItem[]{option211});
group1.setSelectItems(新的SelectItem[]{group11,group12});
group2.setSelectItems(新的SelectItem[]{group21});
组3.setSelectItems(新建SelectItem[]{option31,option32,option33,option34});
group4.setSelectItems(新建SelectItem[]{option41});
类别。添加(第1组);
类别。添加(第2组);
添加类别(第3组);
添加类别(第4组);
}
公共列表getCategories()
{
退货类别;
}
公共字符串getSelection()
{
返回选择;
}
公共选择(字符串选择)
{
this.selection=选择;
}
}

您将能够轻松地使此解决方案适应您的代码。我还确保当您单击项目组时,不会启用按钮。

您能显示查看代码吗?我没有找到组件的任何可用事件
p:multiSelectListbox
…因此,当我没有选择任何选项并启用按钮时,我可以如何禁用按钮?