blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/vip01/用优雅的设计解决丑陋的问题zh-cnsat, 08 apr 2023 20:42:54 gmtsat, 08 apr 2023 20:42:54 gmt60原创小技巧解决list做strtus2标签checkboxlist默认值无法选中的问题http://www.blogjava.net/vip01/archive/2010/12/02/339602.html交口称赞交口称赞thu, 02 dec 2010 06:09:00 gmthttp://www.blogjava.net/vip01/archive/2010/12/02/339602.htmlhttp://www.blogjava.net/vip01/comments/339602.htmlhttp://www.blogjava.net/vip01/archive/2010/12/02/339602.html#feedback5http://www.blogjava.net/vip01/comments/commentrss/339602.htmlhttp://www.blogjava.net/vip01/services/trackbacks/339602.html用struts2的标签checkboxlist可以很方便的用生成checkbox组,但是让其默认选中指定checkbox却是非常麻烦. 

之前有2种方案: 
第一种是修改struts2 tag的源代码. 
比如http://jolestar.javaeye.com/blog/160360 
第二种就是彻底妥协,在action里面把list bean转成数组,赋给checkboxlist的value属性. 

这两种solution都不是那么优雅,作为一个有房贷没希望的it民工我不禁问自己: 
怎么能对自己的要求这么低呢? 怎么能应付了事呢? 

翻文档,研究了下ognl的语法,终于让我找到了一种方便的写法. 


javabean 
  1. public class operate extends basebean {  
  2.     private long id;  
  3.     private string name;  
  4. }  


action中初始化alloplist和myoplist. 
  1. private list myoplist;  
  2. private list alloplist;  


前台jsp用strtus2标签生成checkboxlist 
  1. <s:checkboxlist name="myoplist.id" list="alloplist" listvalue="name"  listkey="id"   
  2. value="myoplist.{#this.id}"/>  



checkboxlist标签用alloplist的内容生成checkbox, 并且用myoplist的值选中默认. 
并且当页面提交的时候,又能自动把checkbox的选中情况,赋给myoplist.operate.id属性. 

这样从后到前到再到后,全都是用list bean去完成,用法统一,不要转换,全部操作的是bean而不是数组. 


精华在于myoplist.{#this.id}这个ognl表达式,自动生成[4, 11]这种格式的数组. 


引申一下,ognl的语法强大到可以myoplist.{?#this.enable > 0}来做过滤,看着有点jquery的味道,非常好用. 

有同志会说,这种过滤没有什么意义,不如在后台sql里面做. 
假设一个应用场景: 
全部用户信息是放在cache里面的list,根据前一个页面来过滤男女,然后显示. 
这时候这个过滤表达式就发挥作用了,不用您在后台一个一个过滤重新组装list了. 
userinfoist.{?#this.sex > 0} 


简洁而优雅,这下能过自己这关了. 




交口称赞 2010-12-02 14:09
]]>
coldfusion实用技巧http://www.blogjava.net/vip01/archive/2008/10/29/237391.html交口称赞交口称赞wed, 29 oct 2008 07:49:00 gmthttp://www.blogjava.net/vip01/archive/2008/10/29/237391.htmlhttp://www.blogjava.net/vip01/comments/237391.htmlhttp://www.blogjava.net/vip01/archive/2008/10/29/237391.html#feedback0http://www.blogjava.net/vip01/comments/commentrss/237391.htmlhttp://www.blogjava.net/vip01/services/trackbacks/237391.html
其中也碰到了一些bt的需求,结合项目把一些小技巧和大家分享一下(一个0 coldfusion经验的菜鸟被赶鸭子上架的搞了几天心得,如果你认为简单的可笑欢迎指教,乱喷党请绕行)

先来点小菜

  • coldfusion使用ajax(coldfusion返回json格式的数据)
用惯了jquery,直接无视coldfusion的ajax。既然用jquery,当然希望后台返回json格式的数据。
找了一下coldfusion 8已经提供非常方便的api。

<cfinvoke component="csmdashboard" method="getcstablesum" timerange="#timerange#" 
wherestr
="#wherestr#" returnvariable="tablesum"/>
<cfscript>
    writeoutput(serializejson(#tablesum#));
cfscript>
writeoutput(serializejson(#tablesum#));这句会把查询结果tablesum序列化成json格式传给前台。

  • coldfusion不自动转义参数
preservesinglequotes(name),coldfusion为了安全,会自动转义参数中的特殊字符。特殊情况下我们不希望他这样做,就可以用上面的方法。

  • coldfusion字符串比较,以xx结尾
<cfif right(listgetat(namelist,loopcount),2) eq "sp">
  • 取整 numberformat

  • 取list长度 listlen

  • 取list第几个listgetat

  • 查询结果字段列表 query.columnlis

  • 查询结果集某个字段的第几行#query.columnname[i]#

以上只是为了再来一个大菜:动态列,表格。以下是简化的代码

 <cfset namelist = "calls,callsp,duration,......................................................">
    

            
<cfoutput query="csmsum">
              
<cfloop index = "loopcount" from="1" to="#listlen(namelist)#">
                
<cfset tmp =numberformat(evaluate("querylist." & listgetat(namelist,loopcount)),0.00)>
                  
          <td class="num">#tmp#td>
              
cfloop>
            
cfoutput>

coldfusion只能根据一个变量名称取取查询结果的字段,没有根据位置或者字符串取,非常不爽。

核心就是用evaluate根据一个字符串去动态构造一个变量,然后根据这个变量取出query中的列。
个这个字符串可以从一个list里面动态循环取出来再拼凑而成
而这个list可以从一些地方查询或者传递过来。
所以表格就动态了起来。







交口称赞 2008-10-29 15:49
]]>
java6(一) webservices (8)web service securityhttp://www.blogjava.net/vip01/archive/2008/06/02/205294.html交口称赞交口称赞mon, 02 jun 2008 04:09:00 gmthttp://www.blogjava.net/vip01/archive/2008/06/02/205294.htmlhttp://www.blogjava.net/vip01/comments/205294.htmlhttp://www.blogjava.net/vip01/archive/2008/06/02/205294.html#feedback2http://www.blogjava.net/vip01/comments/commentrss/205294.htmlhttp://www.blogjava.net/vip01/services/trackbacks/205294.html阅读全文

交口称赞 2008-06-02 12:09
]]>
学习java6(一) webservices (7)传递集合对象终极凯发天生赢家一触即发官网的解决方案http://www.blogjava.net/vip01/archive/2008/05/28/128075.html交口称赞交口称赞wed, 28 may 2008 02:33:00 gmthttp://www.blogjava.net/vip01/archive/2008/05/28/128075.htmlhttp://www.blogjava.net/vip01/comments/128075.htmlhttp://www.blogjava.net/vip01/archive/2008/05/28/128075.html#feedback3http://www.blogjava.net/vip01/comments/commentrss/128075.htmlhttp://www.blogjava.net/vip01/services/trackbacks/128075.html阅读全文

交口称赞 2008-05-28 10:33
]]>
史上最简洁的xml2bean和bean2xmlhttp://www.blogjava.net/vip01/archive/2008/05/21/201822.html交口称赞交口称赞wed, 21 may 2008 01:30:00 gmthttp://www.blogjava.net/vip01/archive/2008/05/21/201822.htmlhttp://www.blogjava.net/vip01/comments/201822.htmlhttp://www.blogjava.net/vip01/archive/2008/05/21/201822.html#feedback0http://www.blogjava.net/vip01/comments/commentrss/201822.htmlhttp://www.blogjava.net/vip01/services/trackbacks/201822.html 引入xstream包

 

xml2bean

xstream xstreamt 
=   new  xstream( new  domdriver());

xstreamt.alias(
" config " , connectconfig. class ); // 指定节点对应的class

connectconfig cfgt 
=  (connectconfig) xstreamt.fromxml(str); // str是接收到的xml字符串,注意,xml里面的节点和bean的属性一定要能对应上,否则会抛异常

system.out.println(cfgt.getadminemail());

 

 

 

bean2xml

xstream xstream 
=   new  xstream( new  domdriver());

xstream.alias(
" config " , connectconfig. class ); // 指定class对应的节点名称,默认是完整package名称+class名称

string str 
=  xstream.toxml(cfg); // str为生成的xml,值为空的属性不生成节点。

system.out.println(str);



交口称赞 2008-05-21 09:30
]]>
log4j输出日志到web目录的相对路径http://www.blogjava.net/vip01/archive/2008/05/21/201821.html交口称赞交口称赞wed, 21 may 2008 01:29:00 gmthttp://www.blogjava.net/vip01/archive/2008/05/21/201821.htmlhttp://www.blogjava.net/vip01/comments/201821.htmlhttp://www.blogjava.net/vip01/archive/2008/05/21/201821.html#feedback4http://www.blogjava.net/vip01/comments/commentrss/201821.htmlhttp://www.blogjava.net/vip01/services/trackbacks/201821.htmlweb.xml加入
<context-param>
  
<param-name>webapprootkeyparam-name>
  
<param-value>webapp.rootparam-value>
 
context-param>

  
<context-param>
  
<param-name>log4jconfiglocationparam-name>
  
<param-value>/web-inf/classes/log/log4j.propertiesparam-value>
 
context-param>

   
<context-param>
      
<param-name>log4jrefreshintervalparam-name>
      
<param-value>600000param-value>
   
context-param>  
    
<listener>
      
<listener-class>
        org.springframework.web.util.log4jconfiglistener
      
listener-class>
   
listener>


然后log4j.properties里面指定文件路径的时候就可以用${webapp.root}/
log4j.appender.info.file=${webapp.root}/web-inf/logs/info.log
同时你的web项目必须有/web-inf/logs这个目录

交口称赞 2008-05-21 09:29
]]>
log4j按级别输出日志到不同的文件http://www.blogjava.net/vip01/archive/2008/05/21/201819.html交口称赞交口称赞wed, 21 may 2008 01:26:00 gmthttp://www.blogjava.net/vip01/archive/2008/05/21/201819.htmlhttp://www.blogjava.net/vip01/comments/201819.htmlhttp://www.blogjava.net/vip01/archive/2008/05/21/201819.html#feedback2http://www.blogjava.net/vip01/comments/commentrss/201819.htmlhttp://www.blogjava.net/vip01/services/trackbacks/201819.html会按日存分割日志文件,并且根据级别输出到不同的文件
log4j.rootlogger=info,stdout,info,debug,error
log4j.appender.stdout=org.apache.log4j.consoleappender
log4j.appender.stdout.layout=org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionpattern=[%-5p] [%d{hh:mm:ss}] %c - %m%n
 
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] [%d{hh:mm:ss}] %c - %m%n
log4j.appender.info.datepattern='.'yyyy-mm-dd
log4j.appender.info.threshold = info 
log4j.appender.info.append=true
log4j.appender.info.file=${webapp.root}/web-inf/logs/info.log
 
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] [%d{hh:mm:ss}] %c - %m%n
log4j.appender.debug.datepattern='.'yyyy-mm-dd
log4j.appender.debug.threshold = debug 
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] [%d{hh:mm:ss}] %c - %m%n
log4j.appender.error.datepattern='.'yyyy-mm-dd
log4j.appender.error.threshold = error 
log4j.appender.error.append=true
log4j.appender.error.file=${webapp.root}/web-inf/logs/error.log


交口称赞 2008-05-21 09:26
]]>
kmplayer的超简洁vista风格皮肤开放下载http://www.blogjava.net/vip01/archive/2008/05/07/198858.html交口称赞交口称赞wed, 07 may 2008 01:33:00 gmthttp://www.blogjava.net/vip01/archive/2008/05/07/198858.htmlhttp://www.blogjava.net/vip01/comments/198858.htmlhttp://www.blogjava.net/vip01/archive/2008/05/07/198858.html#feedback1http://www.blogjava.net/vip01/comments/commentrss/198858.htmlhttp://www.blogjava.net/vip01/services/trackbacks/198858.html阅读全文

交口称赞 2008-05-07 09:33
]]>
flex3 控件转图片http://www.blogjava.net/vip01/archive/2008/01/14/175100.html交口称赞交口称赞mon, 14 jan 2008 02:46:00 gmthttp://www.blogjava.net/vip01/archive/2008/01/14/175100.htmlhttp://www.blogjava.net/vip01/comments/175100.htmlhttp://www.blogjava.net/vip01/archive/2008/01/14/175100.html#feedback1http://www.blogjava.net/vip01/comments/commentrss/175100.htmlhttp://www.blogjava.net/vip01/services/trackbacks/175100.html    var sceneholder:uicomponent  = new uicomponent();
    this.addchildat(sceneholder, 0);
    var snapshotbmd:bitmapdata=imagesnapshot.capturebitmapdata(mylabel);
    var mybitmap:bitmap = new bitmap(snapshotbmd);

    sceneholder.addchild(mybitmap);

 



交口称赞 2008-01-14 10:46
]]>
使用flex的成本http://www.blogjava.net/vip01/archive/2008/01/08/173550.html交口称赞交口称赞tue, 08 jan 2008 02:26:00 gmthttp://www.blogjava.net/vip01/archive/2008/01/08/173550.htmlhttp://www.blogjava.net/vip01/comments/173550.htmlhttp://www.blogjava.net/vip01/archive/2008/01/08/173550.html#feedback9http://www.blogjava.net/vip01/comments/commentrss/173550.htmlhttp://www.blogjava.net/vip01/services/trackbacks/173550.html阅读全文

交口称赞 2008-01-08 10:26
]]>
网站地图