tourble marker是什么意思个怎样的组合

当前访客身份:游客 [
天不仁兮降乱离,地不仁兮使我逢此时
:引用来自“yonge”的评论 引用来自“叶知泉”的评...
:引用来自“叶知泉”的评论 你去查一下 slf4j 还有...
:你去查一下 slf4j 还有mybatis 的log策略 这类似...
:我没怎么配置就打印sql了啊,mybatis322,spring...
:嗯。学习了
://自带的增删改查 jQuery("#gridTable3").jqGrid...
:引用来自“周国生”的评论 两位前辈可以教教我结...
:两位前辈可以教教我结合PHP程序的多字段查询吗?
:SQLyog还是挺好用的
今日访问:59
昨日访问:21
本周访问:59
本月访问:1017
所有访问:92601
Freemarker中访问Struts2的select标签的问题以及解决办法
发表于6年前( 12:05)&&
阅读(4391)&|&评论()
0人收藏此文章,
用Struts2做MVC,Freemarker做表现层。因为Freemarker中可以访问Struts2的一些标签,在加上Freemarker本身的一些功能,个人觉得这种组合很是方便。
但是这里碰到一个问题:我参考Struts2的标签说明文档,做了一个下拉框。这个下拉框默认就是三个值,一个空,一个是,一个否。用Struts2的select标签很容易解决。JSP代码如下:
&s:select name="person.is_emergency" list="#{'-1':'','0':'是','1':'否'}" value="-1"/&
注意,这里采用了一个特殊的处理方式,在页面上来生成一个HashMap,OGNL的表达式方式。#{}
大家可以看一下Struts2的Tag Reference中,关于select标签的说明有如下的例子:
&s:select label="Months" name="months" headerKey="-1" headerValue="Select Month" list="#{'01':'Jan', '02':'Feb', [...]}" value="selectedMonth" required="true" /&
现在问题来了,在Freemarker中,对#{}的使用有自己的含义:输出一个数字值,可以按照格式进行输出。使用的格式如下:
&#assign x=2.582&#{x; m1M2} &#-- 输出2.58 --&
相关资料可以参考
这样一来,如果在ftl中使用struts2的select标签,就不能用#{}这种方式来生成一个默认的内容了。否则会跟Freemarker的标签冲突。ftl模板首先会把这个内容当作数字输出来解析,然后发现其中有引号和非数字类东西,就会报错。
freemarker.core.ParseException: Error on line 33, column 137 in ftl/sys/PersonList.ftl
Found string literal: '-1'
Expecting: number in ftl/sys/PersonList.ftl
at freemarker.core.FMParser.notStringLiteral(FMParser.java:84)
at freemarker.core.FMParser.numberLiteralOnly(FMParser.java:147)
at freemarker.core.FMParser.NumericalOutput(FMParser.java:1077)
at freemarker.core.FMParser.FreeMarkerText(FMParser.java:2705)
at freemarker.core.StringLiteral.checkInterpolation(StringLiteral.java:75)
at freemarker.core.FMParser.StringLiteral(FMParser.java:946)
at freemarker.core.FMParser.PrimaryExpression(FMParser.java:243)
at freemarker.core.FMParser.UnaryExpression(FMParser.java:319)
at freemarker.core.FMParser.MultiplicativeExpression(FMParser.java:435)
at freemarker.core.FMParser.AdditiveExpression(FMParser.java:385)
at freemarker.core.FMParser.RangeExpression(FMParser.java:556)
at freemarker.core.FMParser.RelationalExpression(FMParser.java:511)
at freemarker.core.FMParser.EqualityExpression(FMParser.java:476)
at freemarker.core.FMParser.AndExpression(FMParser.java:585)
at freemarker.core.FMParser.OrExpression(FMParser.java:608)
at freemarker.core.FMParser.Expression(FMParser.java:221)
at freemarker.core.FMParser.NamedArgs(FMParser.java:2048)
at freemarker.core.FMParser.UnifiedMacroTransform(FMParser.java:1904)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2399)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786)
at freemarker.core.FMParser.UnifiedMacroTransform(FMParser.java:1972)
at freemarker.core.FMParser.FreemarkerDirective(FMParser.java:2399)
at freemarker.core.FMParser.Content(FMParser.java:2618)
at freemarker.core.FMParser.OptionalBlock(FMParser.java:2786).......
然后,我去翻阅了Struts2中关于Freemarker的Tag使用说明文档。其中有这种描述:
Remember that all tag attributes must first be set as Strings - they are then later evaluated (using ) to a different type, such as List, int, or boolean. This generally works just fine, but it can be limiting when using FreeMarker which provides more advanced ways to apply attributes. Suppose the following example:
name="${name}" list="%{{1, 2, 3}}"/&
What will happen here is that each attribute will be evaluated to a String as best it can. This may involve calling the toString method on the internal FreeMarker objects. In this case, all objects will end up being exactly what you would expect. Then, when the tag runs, the list attribute will be converted from a String to a List using 's advanced collection support.
But suppose you wish to use FreeMarker's list or hash support instead? You can do this:
name="${name}" list=[1, 2, 3]/&
Notice that the list attribute no longer has quotes around it. Now it will come in to the tag as an object that can't easily be converted to a String. Normally, the tag would just call toString, which would return "[1, 2, 3]" and be unable to be converted back to a List by OGNL. Rather than go through all this back and forth, the frameworks's FreeMarker tag support will recognize collections and not pass them through the normal tag attribute. Instead, the framework will set them directly in the parameters Map, ready to be consumed by the template.
In the end, everything tends to do what you would expect, but it can help to understand the difference of when OGNL is being used and when it isn't, and how attribute types get converted.
他给出了一种用List做为select参数的写法,但是Hash呢?????他没有说明。
我试验用这种方式来处理写成['-1':'','0':'是','1':'否']各种形式都不行......
后来我就采用了一个折中的办法,通过在服务器上生成一个Session或者Application参数,来保存这个Hash,然后ftl模板通过#application来访问。这样居然可以了。
首先,在Login的Action中,访问并设定Application参数:
ActionContext context = ActionContext.getContext();
HashMap yn = new HashMap();
yn.put("-1", "");
yn.put("0", "是");
yn.put("1", "否");
context.getApplication().put("yesno", yn);
然后在ftl模板中如下方式访问:
&@s.select name="person.deleted" list="#application.yesno" value="-1"/&
但是这里有两个问题:
1.所有的Select值都要用这种方式定义在Application中,岂不是......相当的不卫生!:(
2.这种方式生成的Hash,顺序完全是不可控制的。有可能下拉框第一个值是&否&,第二个是"空",第三个是"是",这.......
最终在今天早上的时候,突然想到,既然Freemarker要解析这个东西,那么我就不让他解析,我把它当作字符串参数按照原样传递给Struts2的Taglib,这样是不是可行呢?
&@s.select name="person.deleted" list=r"#{'-1':'','0':'是','1':'否'}"
value="-1"/&
OK,一切搞定。是不是很简单,我也觉得是。
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读troublemaker吧_百度贴吧
关注:486,609贴子:627,615
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧排名:
本吧签到人数:7236成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
【kukienews独家】[Beast张贤胜5月solo出击,能否成为歌谣界的变数引人瞩目]最近多数歌谣界有关人士表示&张贤胜将以solo回归&张贤胜预计于5
4月真是一个节日蛮多假期蛮多的月份。清明&五一大家都想好怎么过了吗~在过好假期的同时不要忘记来签到哦^^
为何还是有金链!!!!!!!!
cr:SoulPeace solo大发!!!!!!!!!!!!!!!!!!!!!!!!
CR.SoulPeace_张贤胜个人应援站
最近经常出现在Rado哥录音室的张贤胜…每天和Rado哥在一起的张贤胜…
据说一楼不能带图 据说标题写感受也会被删 心好累... 正文二楼
hi 欢迎来到集体刷经验楼 要想刷经验升级就来这里吧 禁止单独开帖
咱们红红的泫雅被评为第三名!当然,身材杠杠的,我认为身材肯定是第一名!!
因为要重新整顿贴吧 为防止首页过乱 影响美观 特开此楼 &新开的贴全部删除哟& 以后的更新都发在这里吧^^ 希望大家在troublemaker吧玩的愉快 百
2015能跟旧格式贴说白白吗
草儿抽风删了好多自拍QAQ!!!草马时期的也都没有啦QAQ!!!
为配合本吧换新格式,旧格式老是被顶上来,影响吧务的管理,我就重新开个资源贴吧 麻烦新饭遵守吧规,顶旧帖的问题老生常谈了,一个旧格式帖出现在首
注:本帖除吧务外禁止回复 吧友可在楼中楼回复询问吧务 【删帖格式】 删帖标题:xxxxxxxxxxxxxxxxxxx 删帖楼主:@xxx 删帖原因:xxxxxxxxxxxxxxxxxxx
一楼给TM~~~~~~~
1L祝回归大发wwww空降一位吧!!    不管你喜不喜欢金泫雅 她都站在那里 而且一时半会儿倒不下去
◎&#x2764;═┈━═┈━═┈━═━═┈━═━═┈━═&#x2764;◎ 百度☆张根硕(锡)吧☆全体鳗鱼诚挚邀请贵吧全体吧友共同关注 4月22日【张根硕吧建
这个帖子原来发过,但因为格式更新了,所以重发,以前发过的图图也会再发一遍(&^ω^&) 2L镇楼 3L4L,备用 5L发图
图片cr:logo 今天顺毛也可爱= ̄ω ̄=!!!!
&#x2665;﹏郑秀妍吧全体maomaos邀您共祝郑秀妍4月18日生日快乐﹏&#x2665; &#x2665;﹏我们最爱的你,生日快乐﹏&#x2665;
卧槽真的是美的啊QAQ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!图片cr:logo
   ┾━┾━━━━┄ ·    ┊Apink吧┊尹普美吧┊郑恩地吧┊孙娜恩吧┊南珠吧┊吴夏荣吧┊        ┈┈┈┈┈┈┈┈┈┈ ┈┈┈┈┈┈
cr.logo 草儿今天顺毛好帅~
cr.&#xB3C8;&#xAC00;&#xC2A4;SE MR.
cr.&#xCD94;&#xCE74;&#xCD94;&#xCE74;
啦啦啦0.2期话题出来了,troublemakercp吧的话题是篡改幻想两只的甜蜜生活,欢迎去那里发言,本期的话题是⊙▽⊙他们有没有那么一瞬间会把你秒杀
CR.&#xC2A4;&#xD3EC;&#xCE20;&#xC11C;&#xC6B8;
cr:4minuteBarCN 哎一古!!衣服好sexy!!  『若非黄土白骨,      守你百岁无忧』
cr.B.V.maker
草儿应援物出来了一个啦= ̄ω ̄=!!!!!!!!!!!!!!!!!!!!
cr韩流音悦Tai 哟哟!!牛仔衣休闲美啊啊!! 这里一只很好勾搭的饼子呐= ̄ω ̄=
真的是小富婆啊!!!!!!!!!!!!
cr:4minuteBarCN 马儿好美!! 这里一只很好勾搭的饼子呐= ̄ω ̄=
卧槽太像了!!!!!!!!!!!!!!!!!!!!!!
Trouble Maker镇楼~
很幸运的楼楼再一次搬文;了,孩子们,别顶旧帖了让它沉睡吧, 顺便说一下,晚上更文...
应吧主要求,由于吧内格式更改,现开此新楼,将原帖《Tm◆131130科普◆没有明天相关服饰品牌搜集》内容搬运至此处。 在此预先感谢吧务帮忙搬贴,顺便
CR.logo 美美的马儿 帅气的小新郎草儿
与TA相关的贴吧
小吧:小吧主共18人
会员: 吧内常用链接友情贴吧两种方法组合Servlet + Freemarker
┆┆ &┆ &┆ ┆
站内资源搜索:
┆ 将本文寄给朋友&&
两种方法组合Servlet + Freemarker
〖 作者:不详 〗〖 大小:2K 〗〖 发布日期: 〗〖 浏览:0 〗
Servlet的轻巧高效,Freemarker的强大简便,两者结合将是超轻的组合,即可避免丑陋的Java代码和HTML代码杂揉,又可高效基于模板的站点开发。闲话少说,项目需要:
freemarker-2.3.13.jar
定义两个Servlet:
HelloAction.java 对应 /hello,借助Freemarker硬编码输出
public class HelloAction extends HttpServlet {
&&& private static final long serialVersionUID = -1320176L;
&&& private Configu
&&& public void init() throws ServletException {
&&&&&&& configuration = new Configuration();
&&&&&&& configuration.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/pages");
&&&&&&& configuration.setEncoding(Locale.CHINA, "UTF-8");
&&& &#64;SuppressWarnings("unchecked")
&&& public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
&&&&&&& // 填充数据类型
&&&&&&& Map map = new HashMap();
&&&&&&& map.put("userName", "小敏");&&&
&&&&&&& Template template = configuration.getTemplate("hello.html");
&&&&&&& response.setContentType("text/ charset=" + template.getEncoding());
&&&&&&& Writer out = response.getWriter();
&&&&&&& try{
&&&&&&&&&&& template.process(map, out);
&&&&&&& }catch (TemplateException e) {
&&&&&&&&&&& e.printStackTrace();
&&& public void destroy() {
&&&&&&& super.destroy();
&&&&&&& if(configuration != null){
&&&&&&&&&&& configuration =
对应模板:
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&使用Freemarker渲染2&/title&
你好, $&{userName!} !
HiAction.java 对应 /hi ,借助Freemrker Servlet的拦截功能,如以往写代码方式,感觉不到Freemarker的存在。
public class HiAction extends HttpServlet {
&&& private static final long serialVersionUID = 153077L;
&&& public void doGet(HttpServletRequest request, HttpServletResponse response)
&&&&&&&&&&& throws ServletException, IOException {
&&&&&&& request.setAttribute("thename", "小敏");
&&&&&&& request.getRequestDispatcher("/WEB-INF/pages/hi.html").forward(request, response);
对应的模板:
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&使用Freemarker渲染&/title&
hi $&{thename!}~&br /&
但需要在web.xml 配置文件中定义如下:
&&& &servlet-name&freemarker&/servlet-name&
&&& &servlet-class&
&&&&&&& freemarker.ext.servlet.FreemarkerServlet
&&& &/servlet-class&
&&& &!-- FreemarkerServlet settings: --&
&&& &init-param&
&&&&&&& &param-name&TemplatePath&/param-name&
&&&&&&& &param-value&/&/param-value&
&&& &/init-param&
&&& &init-param&
&&&&&&& &param-name&NoCache&/param-name&
&&&&&&& &param-value&true&/param-value&
&&& &/init-param&
&&& &init-param&
&&&&&&& &param-name&ContentType&/param-name&
&&&&&&& &param-value&text/ charset=UTF-8&/param-value&
&&&&&&& &!-- Forces UTF-8 output encoding! --&
&&& &/init-param&
&&& &!-- FreeMarker settings: --&
&&& &init-param&
&&&&&&& &param-name&template_update_delay&/param-name&
&&&&&&& &param-value&0&/param-value&&!-- 0 is for development only! Use higher value otherwise. --&
&&& &/init-param&
&&& &init-param&
&&&&&&& &param-name&default_encoding&/param-name&
&&&&&&& &param-value&UTF-8&/param-value&&!-- The encoding of the template files. --&
&&& &/init-param&
&&& &init-param&
&&&&&&& &param-name&number_format&/param-name&
&&&&&&& &param-value&0.##########&/param-value&
&&& &/init-param&
&&& &load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&&& &servlet-name&freemarker&/servlet-name&
&&& &url-pattern&*.html&/url-pattern&
&/servlet-mapping&
使用哪一种组合方式,看您喜好了。
借助于Freemarker自身的Servlet工具,只是用于拦截Servlet中forward转向使用到的HTML资源文件。
很简陋,但凑合着能看。
http://www.blogjava.net/yongboy/archive//301860.html
&严禁发表涉及封建迷信、国家政治等敏感问题的内容
&■ 对本文的评价(带 * 为必填内容,400字以内)&&&&严禁发表涉及封建迷信、国家政治等敏感问题的内容。
您的电子邮件&
您的个人主页&
* 您的评价&
以往的评价
以上文章版权由原作者所有。未经同意,不得将其任何一部分复制、转载、发布等未授权操作。
Java学习室 ― 陈伟波个人主页
COPY RIGHT 2005英语单词马克笔marker,用汉语怎么发音_百度知道
英语单词马克笔marker,用汉语怎么发音
/&#602;,美音读为&#47:sister 姐姐;&#47,妈妈希望我能帮助你解疑释惑,如这个字念&#47,弟弟under 在……下面(一般指正下方)rooster 公鸡winter 冬天marker 记号笔mother 母亲;mɑrk&#602,妹妹brother 哥哥;。字母组合er(以及其它元音字母加上-r)出现在非重读音节中时;&#712
其他类似问题
英语单词的相关知识
按默认排序
其他2条回答
马克。ma ke
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 marker是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信