在action 有一个map,Map pageMap = new HashMap(); 和set get方法,
数据是这样的,里面 有可能有多了。比如 还有AAAAA3=对应的对象
AAAAA2{AAAAA1=com.dxyt.ybjg.action.SelectIllegal@16f70a4, AAAAA2=com.dxyt.ybjg.action.SelectIllegal@14c5b37}com.dxyt.ybjg.action.SelectIllegal@16f70a4是这个对象,里面包含下属性。我想在freeer中取的 对象的属性我现在是这么写的: // students是map 的key
 <#list pageMap?keys as students> 
 // 通过pageMap[students] 可以取出key 所对应的对象
 <#assign stu = pageMap[students]>
     // 给对象as一个变量,也就是这个地方出的错 如下
     <#list stu as student> 
${student.illegalNo1} 
${student.illegalTime1} 
     </#list> 
 </#list> 
错误代码
FreeMarker template error!Expected collection or sequence. stu evaluated instead to freeer.ext.beans.StringModel on line 48, column 28 in ftl/disposition/affirmillegallist.ftl.
The problematic instruction:
----------
==> list stu as student [on line 48, column 21 in ftl/disposition/affirmillegallist.ftl]
----------Java backtrace for programmers:
----------
freeer.template.TemplateException: Expected collection or sequence. stu evaluated instead to freeer.ext.beans.StringModel on line 48, column 28 in ftl/disposition/affirmillegallist.ftl.
at freeer.core.TemplateObject.invalidTypeException(TemplateObject.java:135)
at freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:190)
at freeer.core.Environment.visit(Environment.java:415)
at freeer.core.IteratorBlock.accept(IteratorBlock.java:102)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
at freeer.core.Environment.visit(Environment.java:415)
at freeer.core.IteratorBlock.accept(IteratorBlock.java:102)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.MixedContent.accept(MixedContent.java:92)
at freeer.core.Environment.visit(Environment.java:208)
at freeer.core.Environment.process(Environment.java:188)
at freeer.template.Template.process(Template.java:237)
at org.apache.struts2.views.freeer.FreeerResult.doExecute(FreeerResult.java:187)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)

解决方案 »

  1.   

    如果用的是struts2:在freeer中引用struts2标签对map进行处理即可。
      

  2.   

    用的是struts2 ,具体 该怎么写 ,谢谢
      

  3.   

    不要assign 试试<#list pageMap?keys as students> 
        // 给对象as一个变量,也就是这个地方出的错 如下 
        <#list pageMap[students] as student> 
    ${student.illegalNo1} 
    ${student.illegalTime1} 
        </#list> 
    </#list> 
      

  4.   

    1.将struts2标签库tld放在指定目录下。「/WEB-INF/struts-tags.tld」。
    2.web.xml配置JspSupportServlet:
    <servlet>
    <servlet-name>JspSupportServlet</servlet-name>
    <servlet-class>
        org.apache.struts2.views.JspSupportServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    3.模板使用<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />引用标签库。
    4.模板中标签写法[<@s.标签名 />]。例:<@s.text name="key" />
    5.action配置result type=freeer
      

  5.   

    把struts-tags.tld放进去后
    <tlib-version>2.2.3</tlib-version>
    提示错误multiple annotations found at this lin3: 
    -cvc-type.3.1.3:the value '2.2.3' of element 'tlib-version' is not valid.
    -cvc-datatype-valid.1.2.1:'2.2.3' is not a valid value for 'decimal'
      

  6.   

    不可能啊。我的项目运行正常啊。struts-tags.tld怎么来的。
    放在什么位置。
      

  7.   

    解压struts2-core-2.1.6.jar 里面的
    放在D:\workspace\yibinTraffic\WebContent\WEB-INF\struts-tags.tld
      

  8.   

    应该没有问题啊。你项目用的也是struts2.1.6
      

  9.   

    恩,是吖。 方便留个QQ msn 啥的吗
      

  10.   

    如果可以把项目压缩发给我看看[email protected]
      

  11.   

     <#assign stu = pageMap[students]>
    改成 <#assign stu = pageMap.get(students)>