2016-01-22 68 views
2

当我执行我的应用程序时,出现错误。logic:iterate抛出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;如果(form!= null){ LoginAction returnCode; LoginForm currentForm =(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

您在struts标签中使用EL的问题,并不期待它。

<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

当我做什么,你告诉我,我有这样的错误:'与前缀logic' – Mercer

+0

您没有导入标签库中导入标签库notEmpty标签,所以你不能用JSP –

+0

确定使用我可以怎样发现它? – Mercer