gpt4 book ai didi

jsf - org.primefaces.component.menubar.MenubarRenderer.encodeSubmenuIcon 处的 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-03 18:27:20 25 4
gpt4 key购买 nike

我在一个primefaces动态菜单栏工作。
菜单栏的内容应该在按下命令按钮时更新。

这是我非常简单的 xhtml 页面

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>CoSMo</title>
</h:head>
<h:body>
#{simpleMenuBacking.init()}
<h:form>
<p:commandButton value="Submit" action="#{simpleMenuBacking.updateModel()}" update="mb1"/>
<p:growl id="messages" showDetail="false"/>
<p:menubar id="mb1" model="#{simpleMenuBacking.model}" />
</h:form>

</h:body>

和我的(相应简单的)支持 bean:
@Named
@SessionScoped
public class SimpleMenuBacking implements Serializable {

private DefaultMenuModel model;

public void init() {
Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.init()] Starting.");

model = new DefaultMenuModel();

String myMenuEntry = "MENU ENTRY " + new Random().nextInt();
Logger.getLogger(UserBacking.class.getName()).info(myMenuEntry);
model.addElement(new DefaultSubMenu(myMenuEntry));
}

public SimpleMenuBacking() {
}

public DefaultMenuModel getModel() {
Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.getModel()] Starting.");
return model;
}

public void updateModel() {

Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.updateModel()] Starting.");

String myMenuEntry = "MENU ENTRY " + new Random().nextInt();
model.addElement(new DefaultSubMenu(myMenuEntry));

Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.updateModel()] Over.");
}

}

不幸的是,当我按下命令按钮时, 菜单栏的模型已更新,但未呈现更改 在菜单栏中。我发现以下异常几乎肯定是导致问题的原因:
SEVERE:   Error Rendering View[/index.xhtml]
java.lang.NullPointerException
at org.primefaces.component.menubar.MenubarRenderer.encodeSubmenuIcon(MenubarRenderer.java:60)
at org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeSubmenu(TieredMenuRenderer.java:161)
at org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeElements(TieredMenuRenderer.java:127)
at org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeMenu(TieredMenuRenderer.java:78)
at org.primefaces.component.menubar.MenubarRenderer.encodeMarkup(MenubarRenderer.java:50)
at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:108)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:559)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
...

这是如何引起的,我该如何解决?
我愿意提供有关我的代码和/或项目设置的更多详细信息。谢谢。

最佳答案

最后,我想出了问题所在。

this discussion说明,如果 DefaultSubMenu 对象没有 id,则菜单栏渲染失败。
只需为每个 DefaultSubMenu 对象分配一个 id,就完成了。

或者,您可以调用

menuModel.generateUniqueIds();

让模型为您生成唯一的 ID。

关于jsf - org.primefaces.component.menubar.MenubarRenderer.encodeSubmenuIcon 处的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25242071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com