struts2中级联菜单标签s:doubleselect的若干常见问题(二级菜单不显示,FreeMarker问题)

本文主要是介绍struts2中级联菜单标签s:doubleselect的若干常见问题(二级菜单不显示,FreeMarker问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初学struts2没多久,在用到级联菜单时遇到以下两个问题,相信很多人也会遇到。

一、FreeMarker问题
例如下面的代码:

<s:set name="foobar"value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"doubleName="technology"doubleList="#foobar[top]"label="Technology"/>

这个代码没有在一个<s:form>标签里,执行之后,显示就会出现以下错误:

freemarker.core.InvalidReferenceException: Expression parameters.formName is undefined on line 98, column 43 in template/simple/doubleselect.ftl.at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)at freemarker.core.Expression.getStringValue(Expression.java:118)at freemarker.core.Expression.getStringValue(Expression.java:93)at freemarker.core.DollarVariable.accept(DollarVariable.java:76)at freemarker.core.Environment.visit(Environment.java:196)at freemarker.core.MixedContent.accept(MixedContent.java:92)at freemarker.core.Environment.visit(Environment.java:196)at freemarker.core.Environment.include(Environment.java:1375)at freemarker.core.Include.accept(Include.java:155)at freemarker.core.Environment.visit(Environment.java:196)at freemarker.core.MixedContent.accept(MixedContent.java:92)at freemarker.core.Environment.visit(Environment.java:196)at freemarker.core.Environment.process(Environment.java:176)at freemarker.template.Template.process(Template.java:232)at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:168)at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:530)at org.apache.struts2.components.UIBean.end(UIBean.java:484)at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)at org.apache.jsp.hello_jsp._jspx_meth_s_005fdoubleselect_005f1(hello_jsp.java:613)at org.apache.jsp.hello_jsp._jspx_meth_s_005fform_005f0(hello_jsp.java:185)at org.apache.jsp.hello_jsp._jspService(hello_jsp.java:104)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.yuqiaotech.simplejee.webapp.servlet.SampleFilter.doFilter(SampleFilter.java:46)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.yuqiaotech.simplejee.webapp.servlet.SimpleClickstreamFilter.doFilter(SimpleClickstreamFilter.java:51)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)at java.lang.Thread.run(Thread.java:619)

解决办法很简单,只要给这个标签的 formName属性设置上值即可,如下

<s:set name="foobar" value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"doubleName="technology" doubleList="#foobar[top]" label="Technology" formName="aaa"/>

这样就不会出现上述错误,但紧接着有第二个问题。

二、二级菜单没有值,不显示

这个问题非常好解决,但我也在网上找了很久,不过我也小白了一把,相信很多人在真正用时,都会把这个<s:doubleselect>放在一个FORM里,不然它也就没有意义了。

所以做如下改动就可以了,并且第一个问题中提到要加formName属性也可以去掉了,如下:

<s:form action="Menu" name="aaa">
<s:set name="foobar" value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"doubleName="technology" doubleList="#foobar[top]" label="Technology"/>
</s:form>



这篇关于struts2中级联菜单标签s:doubleselect的若干常见问题(二级菜单不显示,FreeMarker问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/459178

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su