2012-02-03 55 views
0

我试图调查这个问题,但一直没有找到解决方案。我使用primefaces数据与分页。我为Edex Burns在他的博客中建议的viewexpiredexception错误编写了异常处理程序,但在与ajax提交(例如,数据表导航页面)结合使用时,vee上的页面重定向不处理。我使用了BalusC在这里提出的解决方案JSF Status bar/connection status information,但是chrome说它缺少jsf.ajax。* javascript命名空间。该页面在tomcat 7.0.22上运行,启动时没有错误/警告,后端基于spring和mybatis。下面是web.xml中PrimeFaces 3.0 + Mojarra 2.1.6 javascript ajax包jsf.ajax。*不可用 - ViewExpiredException

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>Discontinui</display-name> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
     <param-value>resources.application</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>index.jsf</welcome-file> 
    </welcome-file-list> 
    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    <session-config> 
     <session-timeout>2</session-timeout> 
    </session-config> 
</web-app> 

这里是faces-config.xml中

<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 

    <application> 
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
    </application> 

    <factory> 
     <exception-handler-factory>it.dipvvf.vi.app.common.ViewExpiredExceptionExceptionHandlerFactory</exception-handler-factory> 
    </factory> 
</faces-config> 

这里是的index.xhtml页:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
    <title>Prova</title> 
    <script type="text/javascript"> 
    var statusUpdate = function statusUpdate(data) { 
     var statusArea = document.getElementById("statusArea"); 
     var text = statusArea.value; 
     text = text + "Name: "+data.source.id; 
     if (data.type === "event") { 
      text = text +" Event: "+data.name+"\n"; 
     } else { // otherwise, it's an error 
      text = text + " Error: "+data.name+"\n"; 
     } 
     statusArea.value = text; 
    }; 

    // Setup the statusUpdate function to hear all events on the page 
    alert("0"); 
    jsf.ajax.addOnEvent(statusUpdate); 
    alert("1"); 
    jsf.ajax.addOnError(statusUpdate); 
    alert("2"); 
    </script> 
</h:head> 
<h:body> 
    <h:form> 
Selezionare il tipo di accesso:<br /> 
     <p:selectOneMenu id="somAccessMode" value="#{accessMode.mode}"> 
      <f:selectItem itemValue="#{accessMode.ufficioPersonale}" 
       itemLabel="Ufficio Personale" /> 
      <f:selectItem itemValue="#{accessMode.capoTurno}" 
       itemLabel="Capo Turno" /> 
     </p:selectOneMenu> 
     <br /> 
     <p:commandButton id="bEnter" value="Entra" 
      action="#{accessMode.onEntraClick}" update="growl" /> 
     <br /> 
     <p:dataTable var="nominativo" value="#{accessMode.elencoNominativi}" paginator="true" rows="1" 
       paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
       rowsPerPageTemplate="5,10,15"> 
      <p:column> 
       <f:facet name="header"> 
        Cognome 
       </f:facet> 
       <h:outputText value="#{nominativo.cognome}" /> 
      </p:column> 

      <p:column> 
       <f:facet name="header"> 
        Nome 
       </f:facet> 
       <h:outputText value="#{nominativo.nome}" /> 
      </p:column> 

      <p:column> 
       <f:facet name="header"> 
        Data Iscrizione 
       </f:facet> 
       <h:outputText value="#{nominativo.iscrizione}"> 
        <f:convertDateTime pattern="dd-MM-yyyy" /> 
       </h:outputText> 
      </p:column> 
     </p:dataTable> 
     <hr /> 
     <br /> 
     <!-- <p:messages showDetail="true" autoUpdate="true"/> --> 
     <p:growl id="growl" showDetail="true" sticky="true" /> 
     <h3>Status:</h3> 
     <textarea id="statusArea" cols="40" rows="10" readonly="readonly" /> 
    </h:form> 
</h:body> 
</html> 

我已经把超过只需要进行测试。警报(“1”)和“2”不显示,并且jsf.ajax.add ...在浏览器中引发错误。如果我在chrome中查看并生成页面,我看不到任何包含在mojarra包中的jsf.js。缺陷在哪里?

感谢任何人,并为长度感到抱歉!

+0

我看到jsf.js存在于jsf-impl-2.1.6.jar中。为了确认您的结果,您可以在表单中包含标签,并查看jsf.js是否包含在页面源代码中。 – Ravi 2012-02-04 18:25:29

+0

是的,Ravi ...将h:元素添加到表单中,将jsf.js添加到脚本包含列表中。我希望只是添加名称空间,h:head和h:表单元素将解决所有需要的包含。我自己找到另一个解决方案,只需使用faces-redirect = true param重定向到expired-info页面即可。我正在尝试使用jsf.ajax javascipt函数的原始解决方案。我会告诉你!非常感谢您的回复! – crick77 2012-02-05 10:10:39

+0

哎哟...这些功能真的存在,但宣布**后**我的脚本!