??xml version="1.0" encoding="utf-8" standalone="yes"?>
之前?U方?
W一U是修改struts2 tag的源代码.
比如http://jolestar.javaeye.com/blog/160360
W二U就是彻底妥?在action里面把list bean转成数组,赋给checkboxlist的value属?
q两Usolution都不是那么优?作ؓ(f)一个有房贷没希望的IT民工我不问自己:
怎么能对自己的要求这么低? 怎么能应付了(jin)事呢?
L?研究?jin)下ognl的语?l于让我扑ֈ?jin)一U方便的写法.
JavaBean
Action中初始化allOpList和myOpList.
前台jsp用strtus2标签生成checkboxlist
checkboxlist标签用allOpList的内容生成checkbox, q且用myOpList的值选中默认.
q且当页面提交的时?又能自动把checkbox的选中情况,赋给myOpList.Operate.id属?
q样从后到前到再到后,全都是用list beand?用法l一,不要转换,全部操作的是bean而不是数l?
_֍在于myOpList.{#this.id}q个ognl表达?自动生成[4, 11]q种格式的数l?
引申一?ognl的语法强大到可以myOpList.{?#this.enable > 0}来做qo(h),看着有点Jquery的味?非常好用.
有同志会(x)?q种qo(h)没有什么意?不如在后台sql里面?
假设一个应用场?
全部用户信息是放在cache里面的list,Ҏ(gu)前一个页面来qo(h)男女,然后昄.
q时候这个过滤表辑ּ发挥作用了(jin),不用(zhn)在后台一个一个过滤重新组装list?
userInfoist.{?#this.sex > 0}
z而优?q下能过自己q关?
]]>
其中也碰C(jin)一些bt的需求,l合目把一些小技巧和大家分n一下(一? ColdFusionl验的菜鸟被赉子上架的搞了(jin)几天?j)得Q如果你认ؓ(f)单的可笑Ƣ迎指教Qؕ喷党L(fng)行)(j)
先来点小?br />
用惯?jin)jqueryQ直接无视ColdFusion的ajax。既然用jqueryQ当然希望后台返回json格式的数据?br />找了(jin)一下coldfusion 8已经提供非常方便的api?br />
wherestr="#wherestr#" (tng)returnVariable="tableSum"/>
<cfscript>
(tng) (tng) (tng) (tng)writeOutput(SerializeJSON(#tableSum#));
</cfscript>
PreserveSingleQuotes(name)QColdFusionZ(jin)安全,?x)自动{义参C的特D字W。特D情况下我们不希望他q样做,可以用上面的方法?br />
<cfif (tng)Right(ListGetAt(nameList,LoopCount),2) (tng)eq (tng)"sp">
以上只是Z(jin)再来一个大菜:(x)动态列Q表根{以下是化的代码
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)<CFOUTPUT (tng)query="csmSum">
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)<cfloop (tng)index (tng)= (tng)"LoopCount" (tng)from="1" (tng)to="#ListLen(nameList)#">
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)<cfset (tng)tmp (tng)=NumberFormat(Evaluate("querylist." (tng)& (tng)ListGetAt(nameList,LoopCount)),0.00)>
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) <td (tng)class="num">#tmp#</td>
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</cfloop>
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</CFOUTPUT>
ColdFusion只能Ҏ(gu)一个变量名U取取查询结果的字段Q没有根据位|或者字W串取,非常不爽?br />
核心(j)?yu)是?span style="color: rgb(0, 0, 255);">EvaluateҎ(gu)一个字W串d态构造一个变量,然后Ҏ(gu)q个变量取出query中的列?br />个这个字W串可以从一个list里面动态@环取出来再拼凑而成
而这个list可以从一些地Ҏ(gu)询或者传递过来?br />所以表格就动态了(jin)h?br />
]]>
]]>
]]>
(tng)
XML2Bean
XStream (tng)xStreamt (tng)
=
(tng)
new
(tng)XStream(
new
(tng)DomDriver());
xStreamt.alias(
"
config
"
, (tng)ConnectConfig.
class
);
//
指定节点对应的class
ConnectConfig (tng)cfgt (tng)
=
(tng)(ConnectConfig) (tng)xStreamt.fromXML(str);
//
str是接收到的xml字符Ԍ注意Qxml里面的节点和bean的属性一定要能对应上Q否则会(x)抛异?/span>
System.out.println(cfgt.getAdminEmail());
(tng)
(tng)
(tng)
Bean2XML
XStream (tng)xStream (tng)
=
(tng)
new
(tng)XStream(
new
(tng)DomDriver());
xStream.alias(
"
config
"
, (tng)ConnectConfig.
class
);
//
指定class对应的节点名Uͼ默认是完整package名称Qclass名称
String (tng)str (tng)
=
(tng)xStream.toXML(cfg);
//
str为生成的xmlQgؓ(f)I的属性不生成节点?/span>
System.out.println(str);
]]>
(tng) (tng)<param-name>webAppRootKey</param-name>
(tng) (tng)<param-value>webApp.root</param-value>
(tng)</context-param>
(tng) (tng)<context-param>
(tng) (tng)<param-name>log4jConfigLocation</param-name>
(tng) (tng)<param-value>/WEB-INF/classes/log/log4j.properties</param-value>
(tng)</context-param>
(tng) (tng) (tng)<context-param>
(tng) (tng) (tng) (tng) (tng) (tng)<param-name>log4jRefreshInterval</param-name>
(tng) (tng) (tng) (tng) (tng) (tng)<param-value>600000</param-value>
(tng) (tng) (tng)</context-param> (tng) (tng)
(tng) (tng) (tng) (tng)<listener>
(tng) (tng) (tng) (tng) (tng) (tng)<listener-class>
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)org.springframework.web.util.Log4jConfigListener
(tng) (tng) (tng) (tng) (tng) (tng)</listener-class>
(tng) (tng) (tng)</listener>
然后log4j.properties里面指定文g路径的时候就可以?{webApp.root}/
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
同时你的web目必须?WEB-INF/logsq个目录
]]>
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] (tng)[%d{HH:mm:ss}] (tng)%c (tng)- (tng)%m%n
(tng)
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] (tng)[%d{HH:mm:ss}] (tng)%c (tng)- (tng)%m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold (tng)= (tng)I(yng)NFO (tng)
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
(tng)
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] (tng)[%d{HH:mm:ss}] (tng)%c (tng)- (tng)%m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold (tng)= (tng)DEBUG (tng)
log4j.appender.debug.append=true
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log
log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] (tng)[%d{HH:mm:ss}] (tng)%c (tng)- (tng)%m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold (tng)= (tng)ERROR (tng)
log4j.appender.error.append=true
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log
]]>
]]>
(tng) (tng) (tng) this.addChildAt(sceneHolder, 0);
(tng) (tng) (tng) var snapShotBMD:BitmapData=ImageSnapshot.captureBitmapData(myLabel);
(tng) (tng) (tng) var myBitmap:Bitmap = new Bitmap(snapShotBMD);
(tng) (tng) (tng) sceneHolder.addChild(myBitmap);
(tng) <mx:Label id="myLabel" x="187" y="86" text="Hermit" visible="false"/>