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
…因此,当我没有选择任何选项并启用按钮时,我可以如何禁用按钮?