我有一个运行在tomcat 8上的primefaces Web应用程序。在META-INF/context.xml中,我定义了以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/syslac"/>


在我的xhtml页面中,我有以下片段代码,其中p:commandButton具有oncomplete标记,它将执行handleLoginRequest函数。

<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检索上下文路径,因此无法发送导航:/syslac/page.xhtml中window.location使用的视图arg,其中syslac是应用程序的上下文路径。

最佳答案

上下文路径在ExternalContext#getRequestContextPath()可用的支持Bean中。

String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();


因此,您可以例如:

String loginURI = contextPath + "/login.xhtml";
// ...


注意,当用作JSF导航结果时,这是完全不必要的。有关正确的方法,请参见底部的第二个“另请参阅”链接。

上下文路径可通过HttpServletRequest#getContextPath()在EL中使用。

#{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?
What URL to use to link / navigate to other JSF pages

关于tomcat - 从META-INF/context.xml获取Web应用程序上下文路径,以产生导航结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46556861/

10-11 20:48