从 META-INF/context.xml 获取 Web 应用程序上下文路径以生成导航结果
Get the web application context path from META-INF/context.xml to produce an outcome for navigating
我在 tomcat 上有一个 primefaces 网络应用程序 运行 8. 在 META-INF/context.xml
中,我定义了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/syslac"/>
虽然在我的视图 xhtml 页面中我有这个片段代码,其中 p:commandButton 有一个将执行 handleLoginRequest 函数的 oncomplete 标记。
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Usuario:" />
<p:inputText value="#{loginBean.usuarioVendedor.usuarioSistema}" id="username" required="true" label="username" />
<h:outputLabel for="password" value="Contrasena:" />
<h:inputSecret value="#{loginBean.usuarioVendedor.clave}" id="password" required="true" label="password" />
<f:facet name="footer">
<p:commandButton value="Ingresar" update=":growl" actionListener="#{loginBean.loguearse}" oncomplete="handleLoginRequest(xhr, status, args)" />
</f:facet>
</h:panelGrid>
</h:form>
剧本:
<script type="text/javascript">function handleLoginRequest(xhr, status, args)
{
if (args.validationFailed || !args.loggedIn) {
jQuery('#dialog').effect("shake", {times: 2}, 100);
} else {
dlg.hide();
jQuery('#loginLink').fadeOut();
window.location = args.view;
}
}
</script>
但我无法通过 logginBean 从 META-INF/context.xml
检索上下文路径,因此我可以发送视图参数供 window.location 在导航中使用:/syslac/page.xhtml
其中 syslac 是上下文路径应用程序。
上下文路径位于 ExternalContext#getRequestContextPath()
可用的支持 bean 中。
String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
所以你可以这样做,例如:
String loginURI = contextPath + "/login.xhtml";
// ...
请注意,当用作 JSF 导航结果时,这是完全没有必要的。正确的方法见底部的第二个"See also" link。
上下文路径在 EL 中可用 HttpServletRequest#getContextPath()
。
#{request.contextPath}
所以你可以这样做,例如:
<h:outputScript>
// ...
window.location = "#{request.contextPath}" + args.view;
</h:outputScript>
或者当您的脚本在 .js
文件中时(正确做法!):
<html lang="en" data-baseuri="#{request.contextPath}">
window.location = document.documentElement.dataset.baseuri + args.view;
另请参阅:
- How get the base URL?
我在 tomcat 上有一个 primefaces 网络应用程序 运行 8. 在 META-INF/context.xml
中,我定义了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/syslac"/>
虽然在我的视图 xhtml 页面中我有这个片段代码,其中 p:commandButton 有一个将执行 handleLoginRequest 函数的 oncomplete 标记。
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Usuario:" />
<p:inputText value="#{loginBean.usuarioVendedor.usuarioSistema}" id="username" required="true" label="username" />
<h:outputLabel for="password" value="Contrasena:" />
<h:inputSecret value="#{loginBean.usuarioVendedor.clave}" id="password" required="true" label="password" />
<f:facet name="footer">
<p:commandButton value="Ingresar" update=":growl" actionListener="#{loginBean.loguearse}" oncomplete="handleLoginRequest(xhr, status, args)" />
</f:facet>
</h:panelGrid>
</h:form>
剧本:
<script type="text/javascript">function handleLoginRequest(xhr, status, args)
{
if (args.validationFailed || !args.loggedIn) {
jQuery('#dialog').effect("shake", {times: 2}, 100);
} else {
dlg.hide();
jQuery('#loginLink').fadeOut();
window.location = args.view;
}
}
</script>
但我无法通过 logginBean 从 META-INF/context.xml
检索上下文路径,因此我可以发送视图参数供 window.location 在导航中使用:/syslac/page.xhtml
其中 syslac 是上下文路径应用程序。
上下文路径位于 ExternalContext#getRequestContextPath()
可用的支持 bean 中。
String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
所以你可以这样做,例如:
String loginURI = contextPath + "/login.xhtml";
// ...
请注意,当用作 JSF 导航结果时,这是完全没有必要的。正确的方法见底部的第二个"See also" link。
上下文路径在 EL 中可用 HttpServletRequest#getContextPath()
。
#{request.contextPath}
所以你可以这样做,例如:
<h:outputScript>
// ...
window.location = "#{request.contextPath}" + args.view;
</h:outputScript>
或者当您的脚本在 .js
文件中时(正确做法!):
<html lang="en" data-baseuri="#{request.contextPath}">
window.location = document.documentElement.dataset.baseuri + args.view;
另请参阅:
- How get the base URL?