freemarker 在ftl页面通过#list 获取后台存入map值并放去select的option中
来源:互联网 发布:淘宝固定背代码 编辑:程序博客网 时间:2024/05/29 11:41
项目采用SpringMVC+MyBatis 框架。
页面显示下拉选项框select中的信息(option),是用字符串类型的参数“1.AA,2.BB,3.CC”维护起来,以后修改参数就可以了,不用动代码。我在后台Controller中,通过分割截取参数,以“key=1,value=AA...”的形式存入dataMap 中,然后在前端ftl页面上利用freemarker变量之一的list来遍历dataMap 并存到下拉选项框中的option中,结果报错:freemarker.core.InvalidReferenceException: Expression dataMap is undefined 。
我的ist遍历方法和网上说的一样,代码如下:
<select name="groupid" id="groupidId" class="select01"> <option value ="">--请选择--</option> <#if dataMap?exists> <#list dataMap?keys as key> <option value="${key}">${dataMap.get(key)}</option> </#list> </#if></select>
上网搜了很久,还是没能解决,后来才发现关键问题所在。
我的原Controller层代码也贴出来:
@Controller@RequestMapping("/hrm/outsync/hrmOutsyncLogAct.do")public class HrmOutsyncLogAct extends BaseAct {@Autowiredprivate HrmOutsyncLogMng hrmOutsyncLogMng; @Autowiredprivate DictSysParamMng dictSysParamMng;@RequestMapping(params ="method=findByPage")public String <span style="color:#FF0000;">findByPage</span>(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {if (!this.rightAuth(request, "SysAdmin")) {return "/msg/noright";}return "/hrm/hrmOutsyncLog/hrmOutsyncLogList";}@RequestMapping(params ="method=getAjaxData")@ResponseBodypublic String <span style="color:#FF0000;">getAjaxData</span>(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {if (!this.rightAuth(request, "SysAdmin")) {return this.beanToJson(new PagerVO());}initPageCom(request);eHrmOutsyncLog.decode();PagerVO pv = hrmOutsyncLogMng.findByPage(eHrmOutsyncLog);<span style="color:#FF0000;">model.addAttribute("dataMap",this.getGroupidName());</span>@SuppressWarnings("unchecked") List<EHrmOutsyncLog> li=(List<EHrmOutsyncLog>) pv.getDatas(); if(!Util.isBlank(li)) { for (EHrmOutsyncLog eHrmOutsyncLog2 : li) { eHrmOutsyncLog2.setGroupidName(this.getGroupidName().get(eHrmOutsyncLog2.getGroupid().toString())); } } v.setDatas(li); return this.beanToJson(pv); }public Map<Object,String> getGroupidName() throws Exception { String str = dictSysParamMng.getValueByCode("groupidName"); String[] strs = str.split(","); Map<Object, String> dataMap = new HashMap<Object, String>(); for(String s : strs){ String[] strs1 = s.split(":"); dataMap.put(strs1[0], strs1[1]); } return dataMap; }}
描述下业务:我点击页面对应菜单后,首先会调用findByPage()方法,然后进行权限判定,(有权限)转到hrmOutsyncLogList.ftl页面,此时页面会向后台发出getAjaxData()方法,这时候就会通过service,dao,向数据库查询数据,最后获得的数据会显示在页面对应的位置。页面中有查询按钮,其中有下拉选项框select,里面的数据如前所说所获得。
疑问:通过在后端遍历证明,dataMap中有数据.我也将dataMap放到Modelp 中了,前端的遍历也是没错的,但为什么前端页面没能获取dataMap呢?
原因:症结就是这两个方法findByPage(),getAjaxData()。点击菜单后下一步,select中option的值,也就是页面中dataMap就应该接收到值,而此时并没有向后台发送请求,也就是说应该先出来option中的值,再在页面上显示从数据库中查询出来的数据。从代码<span style="color:#FF0000;">model.addAttribute("dataMap",this.getGroupidName());</span>
的位置看得出来,这句放错地方了,应该是
@RequestMapping(params ="method=findByPage")public String findByPage(HttpServletRequest request, ModelMap model,EHrmOutsyncLog eHrmOutsyncLog) throws Exception {if (!this.rightAuth(request, "SysAdmin")) {return "/msg/noright";}<span style="color:#FF0000;">model.addAttribute("dataMap",this.getGroupidName());</span>return "/hrm/hrmOutsyncLog/hrmOutsyncLogList";}
这样就成功一大半了。为啥不是没问题了呢?我发现项目运行后,dataMap是有值了,但是dataMap.get(key)却取不到值,我的key是String类型的,按理说上面freemarker的遍历map方法没问题,不知道是人品问题不。后来换成了dataMap[key],这样就能成功显示option中的值了.
后记:刚接触Java不久,很多连概念都不是很熟,不过对Java挺感兴趣的,相识恨晚的感觉。为了更好的提升Java能力,也为了更好走程序这条路,今天开通博客,记录自己的成长过程。生命不息,奋斗不止!
1 0
- freemarker 在ftl页面通过#list 获取后台存入map值并放去select的option中
- freemarker页面改变select的option,获取值typename
- ftl页面中获取map值
- Freemarker写的XX.ftl能否在浏览器访问?freemarker的标签写入ftl中能否通过后台传值后显示在浏览器上?
- freemarker循环获取list中map的值
- 一例解析通过$.ajax()获取后台服务器数据并通过vue渲染在页面中
- 获取select中option的value值
- js获取select中option的值
- 获取select中选中option的值
- jsp页面中使用javascript获取后台放在request或session中的值
- jsp页面中使用javascript获取后台放在request或session中的值
- 获取页面中name相同的input或者select标签的option值
- 获取select中option的value值并触发隐藏显示div效果
- servlet里获取jsp页面select的option值
- 解决Error:ftl页面通过form提交表单,后台java类接收的值为null
- freemarker,*.ftl文件在eclipse中正确的打开方式
- freemarker,*.ftl文件在eclipse中正确的打开方式
- spring-mvc整合freemarker并在ftl模版中显示服务端校验的错误信息,JSR303或者JSR349
- 多项式求导
- TextWatcher:监听编辑框EditText中内容的改变
- struts2值栈学习
- 一字棋游戏(C++实现)
- Java-ServletContextEvent-ServletContextAttributeEvent
- freemarker 在ftl页面通过#list 获取后台存入map值并放去select的option中
- BufferedReader读取文件
- AVL树
- rewind和fseek
- [WEB参数加密与WAF的矛盾] 以WEB应用本身的参数加密编写sqlmap的tamper并绕过WAF
- My coding way (7)
- 通过Intent传递对象,已Map为例
- 视频
- TCP状态转换