2016-01-22 1 views
2

Когда я выполняю свое приложение, у меня есть ошибка.логика: iterate throws javax.servlet.jsp.JspException: не удается создать итератор для этой коллекции

Проблема не может возникнуть из-за неправильной версии taglib?

Ошибка:

Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: ServletException in 'menu.jsp': javax.servlet.jsp.JspException: Cannot create iterator for this collection

мое меню заселить в моем Java приложения:

enter image description here

Мой JSP:

<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%> 
<%@ taglib uri="http://struts.apache.org/tags-html-el" prefix="html"%> 
<%@ taglib uri="http://struts.apache.org/tags-bean-el" prefix="bean"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://struts.apache.org/tags-logic-el" prefix="logic"%> 
<%@ taglib tagdir="/WEB-INF/tags/" prefix="customTag"%> 

<customTag:OverlayEntry id="overlaymenu" function="overlaymenu" /> 

<script type="text/javascript" 
    src="<html:rewrite page="/javascript/jquery.easing.js"/>"></script> 
<script type="text/javascript" 
    src="<html:rewrite page="/javascript/jquery.accordion.js"/>"></script> 
<link href="<html:rewrite page="/css/menu.css"/>" rel="stylesheet" 
    type="text/css" /> 

<logic:present name="UserSession" property="menu"> 
     <ul id="navigation"> 
      <logic:iterate id="t" collection="${UserSession.menu.menuEntries}" 
       indexId="idx"> 
       <customTag:MenuEntry 
        entry="<%=(com.sodifrance.apex.presentation.generic.session.MenuEntry) t%>" /> 
      </logic:iterate> 
     </ul> 
</logic:present> 
<script type="text/javascript"> 
    jQuery('.current').parent().parent().prev('A').addClass('selected'); 
    jQuery('#navigation>li>A[href]').addClass('head2'); 

    jQuery('#navigation').Accordion({ 
     header : '.head', 
     navigation : false, 
     event : 'click', 
     autoheight : false, 
     animated : false, 
     active : '.selected', 
     selectedClass : 'selected', 
     alwaysOpen : true 
    }); 

    jQuery('#navigation>li>A.current').addClass('currentHead').removeClass(
      'current'); 
</script> 

мой web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 

    <display-name>APP</display-name> 
    <description>Application</description> 
    <filter> 
     <filter-name>applicationFilter</filter-name> 
     <filter-class>com.presentation.generic.security.ApplicationFilter</filter-class> 
     <init-param> 
      <param-name>exclusions</param-name> 
      <param-value>/generic/authentification/Login.do, 
       /generic/authentification/login_action.do, 
       /generic/authentification/Disconnect.do, 
       *.js, 
       *.css, 
       *.jpg, 
       *.gif, 
       *.png, 
       *.ico 
      </param-value> 
     </init-param> 
     <init-param> 
      <param-name>loginUrl</param-name> 
      <param-value>/generic/authentification/Login.do</param-value> 
     </init-param> 
    </filter> 
    <filter> 
     <filter-name>EncodingFilter</filter-name> 
     <filter-class>com.presentation.generic.security.EncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>ISO-8859-15</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>applicationFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>EncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
    <listener> 
     <listener-class>com.presentation.generic.back.BirtEngineListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>action</servlet-name> 
     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
     <init-param> 
      <param-name>config</param-name> 
      <param-value>/WEB-INF/struts-config.xml</param-value> 
     </init-param> 
     <init-param> 
      <param-name>debug</param-name> 
      <param-value>2</param-value> 
     </init-param> 
     <init-param> 
      <param-name>detail</param-name> 
      <param-value>2</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>initDB</servlet-name> 
     <servlet-class>com.metier.init.DbInitializerServlet</servlet-class> 
     <init-param> 
      <param-name>debug</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </servlet> 
    <servlet> 
     <servlet-name>birtEngineServlet</servlet-name> 
     <servlet-class>com.report.generic.BirtServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>action</servlet-name> 
     <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 
<!-- <servlet-mapping> --> 
<!--  <servlet-name>jsp</servlet-name> --> 
<!--  <url-pattern>/javascript/generic/messages.js</url-pattern> --> 
<!-- </servlet-mapping> --> 
<!-- <servlet-mapping> --> 
<!--  <servlet-name>jsp</servlet-name> --> 
<!--  <url-pattern>*.css</url-pattern> --> 
<!-- </servlet-mapping> --> 
    <servlet-mapping> 
     <servlet-name>initDB</servlet-name> 
     <url-pattern>/initDB</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

Класс действия:

общественного ActionForward logInApplication_loginAction (ActionMapping отображение, форма ActionForm, HttpServletRequest запрос, HttpServletResponse ответ) бросает исключение { ActionForward actionForward = null; если (форма! = Null) { LoginAction returnCode; Форма входа в систему FormForm = (LoginForm); // выполнить код при выходе из текущей страницы currentForm.onExit();

UserSession session = null; 
    AccueilForm accueilForm = new AccueilForm(); 

    if (validateLogin(currentForm, request)) { 
     session = new UserSession(); 
     SessionHelper.getDefault().registerSession(session); 

     initializeUserSession(currentForm, session); 

     returnCode = LoginAction.LOGIN_SUCCESS; 
    } else { 
     ActionErrors e = new ActionErrors(); 
     e.add("property", new ActionMessage("authentification.Login.action.login.failed", Math.floor(Math.random() * 4))); 
     addErrors(request, e); 
     returnCode = LoginAction.LOGIN_FAIL; 
    } 

    switch (returnCode) { 
     case LOGIN_FAIL: 
      request.setAttribute(LoginForm.BEAN_NAME,currentForm); 
      // execute code on entry of next page 
      currentForm.onEntry(); 
      actionForward = mapping.findForward("LOGINACTION_LOGIN_FAIL"); 
      break; 

     case LOGIN_SUCCESS: 
      session.setLogin(currentForm.getLogin()); 
      request.getSession().setAttribute("UserSession", session); 
      accueilForm.onEntry(); 
      request.setAttribute(AccueilForm.BEAN_NAME, accueilForm); 
      actionForward = mapping.findForward("LOGINACTION_LOGIN_SUCCESS"); 
      break; 

     default: 
      break; 
    } 
} 
return actionForward; 

}

моя конфигурация:

  • Tomcat 8
  • Struts 1.3.10
  • Jdk 1,8

ответ

1

Проблема в том, что вы используете EL в теге struts, чего не ожидаете.

<logic:notEmpty name="UserSession" property="menu"> 
    <bean:define id="menuInfo" name="UserSession" property="menu"/> 
    <ul id="navigation"> 
     <logic:iterate id="t" name="menuInfo" property="menuEntries" type="com.example.MenuEntry"> 
      ... 
+0

когда я делать то, что вы скажете мне, у меня есть эта ошибка: 'notEmpty тег в библиотеке тегов импортированной с префиксом logic' – Mercer

+0

вы не импортировать библиотеку тегов, так что вы не можете использовать его с JSP –

+0

Ok Как librairie я могу найти? – Mercer