【问题标题】:Primefaces : Select Check Box menu : NullPointerExceptionPrimefaces:选择复选框菜单:NullPointerException
【发布时间】:2013-10-26 14:56:51
【问题描述】:

我的项目中有一个 selectCheckBoxMenu 的实现。我的 xhtml 文件中的部分代码是:-

<p:row >
    <p:column style=" width: 497px; text-align: right;">
        <h:outputText for="toMails" value="To : " />  
    </p:column>
    <p:column style=" width: 497px; text-align: left;">
        <p:selectCheckboxMenu id="toMails" value="#{schedule.selectedEmailIds}" label="Mail Recipients" filter="true" 
            filterText="Filter" filterMatchMode="startsWith" panelStyle="width:220px">  
            <f:selectItems value="#{schedule.users}" />  
        </p:selectCheckboxMenu>
    </p:column>
</p:row>

我的 Bean 类有代码:-

private String[] selectedEmailIds;  

private Map<String,String> users; 

//Getters and Setters

//Value Loader Method
public void loadWorkFlowServices()
{
    try
    {           
        Map<String, String> tmpUsers = new HashMap<String, String>();  
        tmpUsers.put("Scarface", "Scarface");  
        tmpUsers.put("Goodfellas", "Goodfellas");  
        tmpUsers.put("Godfather", "Godfather");  
        tmpUsers.put("Carlito's Way", "Carlito's Way"); 
        tmpUsers.put("Rang De Basanti", "Rang De Basanti"); 
        tmpUsers.put("Despicable Me", "Despicable Me"); 
        tmpUsers.put("The Dark Knight", "The Dark Knight"); 
        setUsers(tmpUsers);
    }
    catch (Exception e)
    {
        LOGGER.error("Error while loading the workflow services.", e);
    }
}

当我从下拉列表中选择任何值并提交时。我遇到了异常 -

Error occurred while doing security check on URL hit
java.lang.NullPointerException
at org.primefaces.component.selectcheckboxmenu.SelectCheckboxMenu.queueEvent(SelectCheckboxMenu.java:199)
at javax.faces.component.UIInput.validate(UIInput.java:976)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
at javax.faces.component.UIInput.processValidators(UIInput.java:698)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
at javax.faces.component.UIForm.processValidators(UIForm.java:253)

我在网上找不到太多帮助。请建议我缺少什么。

【问题讨论】:

  • 你在哪里调用loadWorkFlowServices()方法?在构造函数中?
  • 这个方法在@PostConstruct 下,所以它在页面加载时被加载。
  • 您将Map&lt;String,String&gt; 影响到String[],它们不应该具有相同的类型吗?
  • @Omar,地图是键值对的组合。 selectedEmailIds 是选定的密钥集合,所以在这种情况下它做得很好(至少这部分)。

标签: java jsf jsf-2 primefaces


【解决方案1】:

查看您的错误,我一直在浏览 Primefaces 的 SelectCheckboxMenu 类,发现了这段代码(Primefaces 3.5 SelectCheckboxMenu:199):

if(event instanceof AjaxBehaviorEvent && eventName.equals("toggleSelect"))

这里你的eventName 出于某种原因解析为null,你得到一个NPE。好像和这个Primefaces bug有关。

无论如何,您提供的代码在 4.0 版本中就像一个魅力,所以如果可以的话,您应该考虑升级。

【讨论】:

  • 如果是这种情况,在 3.5 中是否有任何替代方法,因为目前升级有一些限制。谢谢。
  • 根据 bug track,在 3.4.2 版本中没有发生这种情况。您可以降级到它,或者通过 3.5.x 次要版本,您需要获得许可证。
  • 哦,好的。谢谢。我会试试的。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 2012-08-16
  • 2012-02-26
  • 2012-08-30
  • 1970-01-01
相关资源
最近更新 更多