如何在 PrimeFaces 7.0 上获取 applicationContext 或 context-root nam



我正在尝试获取在jboss-web.xml文件上定义的web应用程序的applicationContext:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/Tesoreria-WEB</context-root>
<max-active-sessions>300</max-active-sessions>
</jboss-web>

有没有办法得到那个字符串Tesoreria-WEB?我需要它,因为我的菜单在从 3.5 升级到 7.0 后不再添加 url 的那部分,所以我将获取该上下文并在创建它们之前添加它。我试过:

System.out.println("Application name: "+ PrimeRequestContext.getCurrentInstance(FacesContext.getCurrentInstance()).getApplicationContext());

但是没有成功,有没有办法还是应该手动添加? 谢谢!

顺便说一句,我认为他们在从 7.0 升级到 3.5 后停止正确添加 url,因为从 6.2 到 7.0 的重大更改 https://github.com/primefaces/primefaces/wiki/Migration-Guide 说"按钮/链接/菜单项:url/href 属性不再自动由上下文路径作为前缀。使用 result 属性在同一应用程序中引用 JSF 视图,或者手动在 url/href 前面加上 #{request.contextPath}。见 https://github.com/primefaces/primefaces/issues/3506。但我不明白这是什么意思。

我希望如何构建我的网址(注意网址上的Tesoreria-WEBhttp://10.13.44.48:8483/Tesoreria-WEB/XHTML/boxes/boxesMassive.xhtml

自从我升级到 7.0 以来,它们的构建方式(这带来了 404):http://10.13.44.48:8483/XHTML/boxes/boxesMassive.xhtml

我在 ManagedBean 上动态制作了我的菜单栏,在 xhtml 上我称之为引用它,这就是所有没有菜单项目没有这样的事情,所有这些都是在托管Bean上制作的:

<p:menubar id="menuBar" binding="#{menuMB.menuBar}"
autoDisplay="false" styleClass="cds-menu-mainmenu"
rendered="#{plantillaGeneralMB.habilitarMenu}" />

这就是我们动态制作菜单的方式,在调试时,我找到了他们从哪里获得网址的确切位置,它有点低,我用英语评论了哪里:

此节点对象来自 org.w3c.dom.Node

private List<SubMenuItem> cargarSubmenus(Node pNodeMenu,
List<String[]> lJerarquiaTemp, String[] tituloPadre) {
Node nodeSubMenu = null;
// Obtener la lista de hijos de este nodo.
NodeList childNodes = pNodeMenu.getChildNodes();
int sizeList = childNodes.getLength();
List<SubMenuItem> lSubmenus = new ArrayList<>();
SubMenuItem subMenu = null;
lJerarquiaTemp.add(tituloPadre);
for (int i = 0; i < sizeList; i++) {
// Obtener el hijo de este nodo correspondiente al indice indicado.
nodeSubMenu = childNodes.item(i);
// Verificar que efectivamente este nodo sea un Submenu
if (nodeSubMenu.getNodeName().equals("SUBMENU")) {
// Verificar que el nodo tenga atributos.
if (nodeSubMenu.hasAttributes()) {
NamedNodeMap map = nodeSubMenu.getAttributes();
// Obtener codigo.
Node codigo = map.item(0);
// Obtener titulo
String titulo = nodeSubMenu.getChildNodes().item(1)
.getTextContent();
// THIS IS THE URL **********************
String url = nodeSubMenu.getChildNodes().item(3)
.getTextContent();
// Im having to add "/Tesoreria-WEB" + url to make my urls well constructed, no idea what changed so much from 3.5 to 7.0 here if someone knows how to make it work without adding this manually its appreciated
subMenu = new SubMenuItem(codigo.getTextContent(), titulo,
"/Tesoreria-WEB"+url);


System.out.println("Application name: "+ PrimeRequestContext.getCurrentInstance(FacesContext.getCurrentInstance()).getApplicationContext());

subMenu.setlJerarquia(lJerarquiaTemp);
String[] menuInfo = { codigo.getTextContent(), titulo, url };
// Si esta nodo tiene mas hijos llamar recursivamente este
// metodo.
if (nodeSubMenu.getChildNodes().item(5) != null
&& nodeSubMenu.getChildNodes().item(5)
.getNodeName().equals("SUBMENU")) {
subMenu.setlSubmenus(cargarSubmenus(nodeSubMenu,
subMenu.getlJerarquia(), menuInfo));
}
if (nodeSubMenu.getChildNodes().item(5) != null
&& nodeSubMenu.getChildNodes().item(5)
.getNodeName().equals("TABS")) {
subMenu.setlTabs(cargarTabs(nodeSubMenu.getChildNodes()
.item(5)));
}
// Adicionar este submenu y sus hijos a la lista de submenus
// del nodo original.
lSubmenus.add(subMenu);
}
}
}
return lSubmenus;
}

在 JSF 中获取应用程序的上下文根的方法是:

FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();

有关详细信息,请参阅从 META-INF/上下文获取 Web 应用程序上下文路径.xml以生成导航结果

是的,他们的意思是这样做...

<p:menuitem value="my URL" url="#{request.contextPath}/boxes/boxesMassive.xhtml" />

相关内容

  • 没有找到相关文章

最新更新