??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲日韩不卡,中文字幕在亚洲第一在线,亚洲一本大道无码av天堂http://www.tkk7.com/aichan/archive/2008/01/16/175804.html艑ְ艑ְWed, 16 Jan 2008 15:47:00 GMThttp://www.tkk7.com/aichan/archive/2008/01/16/175804.htmlhttp://www.tkk7.com/aichan/comments/175804.htmlhttp://www.tkk7.com/aichan/archive/2008/01/16/175804.html#Feedback2http://www.tkk7.com/aichan/comments/commentRss/175804.htmlhttp://www.tkk7.com/aichan/services/trackbacks/175804.html阅读全文

艑ְ 2008-01-16 23:47 发表评论
]]>
介绍ExtremeTable的下一代Jmesahttp://www.tkk7.com/aichan/archive/2007/08/01/133692.html艑ְ艑ְTue, 31 Jul 2007 17:31:00 GMThttp://www.tkk7.com/aichan/archive/2007/08/01/133692.htmlhttp://www.tkk7.com/aichan/comments/133692.htmlhttp://www.tkk7.com/aichan/archive/2007/08/01/133692.html#Feedback11http://www.tkk7.com/aichan/comments/commentRss/133692.htmlhttp://www.tkk7.com/aichan/services/trackbacks/133692.htmlExtremeTable(以下UET,?,,ET.....),可以说不知道的h甚少.不过估计用的也未必多|了(jin).今天,l大家介l一个由ET的作者重新实现的一套关于Table的API.JMesa.
我是一个偶然的Z(x)知道Jmesa,我在做一个数据展现系l的时候想LET的帮?但发现ET׃再更?作者把_֊转移C(jin)新的目?也就是这? JMesa.q个目的目的是为开发者提供更有效的表格展现的API,而不是简单的TagLib.无论从灵zL?易扩展?易用?均比ET上了(jin)一个层 ?最qRelease的版本里?q不包括TagLib.而在下一个版?2.1.0)会(x)加入TagLib,目前TagLibq可用,在SVN里已 ?只是{待下一个版本的发布,光?x)有一些更?不过?x)兼容目前的TagLib?
假如我从API开始介lJMesa,恐怕ƈ不是个好的办?像我以前的文章里面有介绍,l果反响不大.q次军_从TagLib入手,来给大家介绍一下Jmesa.
大家可以从附仉拿到一个Demo.注意Demo依赖JMesa以及(qing)其他Lib.在Lib文g夹下有详l说?
现在来看看JMesa的?
  1. <jm:table id="product" items="products" caption="product listing">  
  2.     <jm:column property="name" sortable="true" filterable="true"/>  
  3.     <jm:column property="price" />  
  4.     <jm:column property="createdTime" />  
  5.     <jm:column property="id" title="edit">  
  6.         <a href="viewProduct.action?id="<jm:property/>"><jm:property name="name"/></a>  
  7.     </jm:column>  
  8. </jm:table>  

估计比较Ҏ(gu)看得懂的代码?
Jmesa 的检{规范当中只有三个Tag:Table,Row,Column.而当前的TagLib实现中只实现?jin)Table和Column两个(Row是可? ?.另加一个Property的Tag.此阶D?Property的Tag是很有用?其v到的作用与Webwork的PropertyTag相差? ? 用来获得对象的某个属?之所以用Property Tag是因为当前的TagLib有个限制是暂时不支持如JSTL?{}q种写法.来?x)支?届时Property Tag也会(x)l箋(hu)获得兼容.Jeff比较們֐于用P代的方式实现Tag,那样可以支持${}q样的写?不过作ؓ(f)TagLib的开?问题?sh)?有时间再 重构一下TagLib,支持JSTL的写?
好了(jin),来说一说这些Tag的用方?
Table:
Attribute Description
id 表格的ID(必须)
items 对象或者Map的集?(必须)
caption 表格的标?
theme 表格的主?自定义样?br>
exportTypes 使用逗号分割导出的类?目前支持导出cd有CSV,Excel
width 表格宽度
style 卌格的Style属?br>
styleClass 使用的Css的Class名字
border 表格?br>
cellpadding 表格属?br>
cellspacing 表格属?br>
实际?真正Release的版本里面将?x)加上var以及(qing)Limit属?
var属性值即在Column标签里可以获得的对象变量.
Limit属性是保存在当前请求的Limit的对象名.
Row:
Attribute Description
highlighter 是否高(sh)昄
onclick 点击事g
onmouseout 鼠标Ud事g
onmouseover 鼠标Ud事g
该Tag是可选的.实际上Jmesa提供?jin)一pd默认的事件响?有必要的情况下才使用.
Column:
Attribute Description
property Java对象或Map的属性名
title 列的名称
filterable 是否可按qo(h)条g查找
sortable 是否要排?br>
width 列宽
style Style属?br>
styleClass 使用的Css的Class的名?br>
ColumnTag的用方法有下面几种:
  1. <jm:column property="name"/>  

仅仅输出对象中Name属性?列名是Name
  1. <jm:column property="name" title="名字" sortable="true" filterable="false"/>  

q样可以得到自定义的列名,可以让列可查?可排?当然你Server端需要相应提供排序及(qing)查找功能.不过q你不提供,客户端也?x)把当前l果排序和查扄.
  1. <jm:column property="id" title="edit">   
  2.     <a href="viewProduct.action?id="<jm:property/>"><jm:property name="name"/></a>   
  3. </jm:column>    

q里l合?jin)PropertyTag.实现自定义列昄.可以灉|定制自己的单元格.
在ColumnTag里面,使用PropertyTag的时?可以指定Name属?如果不指定则使用当前Column的Property属性?
以后支?
  1. <jm:column property="id" title="edit">   
  2.     <a href="viewProduct.action?id=${id}">${name}</a>   
  3. </jm:column>    
q样的写?当然?x)l兼容PropertyTag,管不是Tag规范里的东西.

怿l过上面的一番介l?大家对Jmesa有一定的感性认识了(jin)?q没?下蝲Demo,扔进Tomcat 的App里跑一下就明白?
有什么徏?请一定要告诉?:).

附g?http://www.javaeye.com/topics/download/4eaaa38d-e838-459d-aef2-3be6c4d043df



艑ְ 2007-08-01 01:31 发表评论
]]>
pager-taglib 体验http://www.tkk7.com/aichan/archive/2006/06/27/55248.html艑ְ艑ְMon, 26 Jun 2006 18:22:00 GMThttp://www.tkk7.com/aichan/archive/2006/06/27/55248.htmlhttp://www.tkk7.com/aichan/comments/55248.htmlhttp://www.tkk7.com/aichan/archive/2006/06/27/55248.html#Feedback7http://www.tkk7.com/aichan/comments/commentRss/55248.htmlhttp://www.tkk7.com/aichan/services/trackbacks/55248.html阅读全文

艑ְ 2006-06-27 02:22 发表评论
]]>
Spring AOP 在DWR安全上的应用http://www.tkk7.com/aichan/archive/2006/05/24/47735.html艑ְ艑ְTue, 23 May 2006 16:26:00 GMThttp://www.tkk7.com/aichan/archive/2006/05/24/47735.htmlhttp://www.tkk7.com/aichan/comments/47735.htmlhttp://www.tkk7.com/aichan/archive/2006/05/24/47735.html#Feedback0http://www.tkk7.com/aichan/comments/commentRss/47735.htmlhttp://www.tkk7.com/aichan/services/trackbacks/47735.html?a href="http://www.tkk7.com/aichan/archive/2006/05/10/45321.html">上一文?/a>里提C(jin)可以?DWR自动往Service里面注入一个与Servlet相关的对象,作ؓ(f)参数。只是这P要每个Service都加上这L(fng)一个参敎ͼ奇丑无比Q想?惻I军_pDWR污染一下,Service保留原样。只是增加一个MethodBeforeAdviceQ正是它让DWR的API污染?jin)一下。)(j)Q来?Service的方法进行拦截,可以在Service的调用之前对操作q行所谓的w䆾验证Q授权之cȝ操作。完整的拦截模块几个cL件加个Spring?|文件搞定?/font>

     实现拦截功能的类有:(x)

    一、MainInteceptorQ主拦截器,所以DWR的远E调用都?x)被拦截Q当?dng)?调用是细到方法的,可配|的Q该cdC(jin)Spring AOP的MethodBeforeAdvice接口Q该cL一个集合成员变量,成员?sh)IInteceptor?/font>

    二、IInteceptorQ是一个接口,仅有一个execute(AopContext context)函数。该接口是拦截器Q与前面的主拦截器不同,本接口定义的拦截器是可以q户去实现Qƈ且可以有多个Q。实现接口只需要实现方法。这?拦截器会(x)被主拦截器回调?比如要实C个n份验证的拦截QSecuityInteceptorQ在配置文g中把q个拦截器设|ؓ(f)L截器的属性即可获得回调?/font>

     三、AopContextQAop上下文。在L截器调用IInteceptor的对象时Q把q个上下文对象作为参数来调用子拦截器。从该上下文可获得一pd信息Q如HttpSessionQHttpRequest{。甚至你可以自已讄属性?nbsp;

      下面看一些代码片?
MainInteceptor:

 private List<IInterceptor> interceptors;//定义一pd的子拦截?/font>

public void setInterceptors(List<IInterceptor> interceptors) {
        this.interceptors = interceptors;
    }

在before(Method method, Object[] params, Object target)Ҏ(gu)里:(x)

        WebContext ctx = WebContextFactory.get();//唯一被DWR污染的地?br />        HttpSession session = ctx.getSession();
        AopContext context = new AopContext();        context.setSession(session);
        for(Iterator it = interceptors.iterator(); it.hasNext();){
            IInterceptor interceptor = (IInterceptor) it.next();
            interceptor.execute(context);
        }

 IInterceptorQ?/font>

 public interface IInterceptor {
    public void execute(AopContext context);
}

AopContext׃必脓(chung)出来?jin)?随自已定义些什么属性,不过内|了(jin)一个MapQ用来保存数据Ş?jin)?/font>

下面来看看配|文Ӟ(x)

 <beans>

    <!--要暴露lDWR的Service-->
     <bean id="bookManager" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
      <value>net.jf.ajax.business.BookManager</value>
    </property>
    <property name="target">
      <ref local="bookManagerImpl"/>
    </property>
    <property name="interceptorNames">
      <list>
        <value>dwrAdvisor</value>
      </list>
    </property>
  </bean>

  <bean id="bookManagerImpl" class="net.jf.ajax.business.impl.BookManagerImpl"/>
<!--装配器?如果看不懂,先看看Spring的Aop?QP-->
  <bean id="dwrAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice">
      <ref local="dwrInterceptor"/>
    </property>
    <property name="patterns">
        <list>
            <value>.*.*</value>
          </list>
    </property>
  </bean>


<!--L截器Q给它设|子拦截?->
  <bean id="dwrInterceptor" class="net.jf.ajax.iterceptor.MainInterceptor">
      <property name="interceptors">
          <list>
              <ref bean="test"/>
          </list>
      </property>
  </bean>
  <!--其中一个子拦截器的实现-->
  <bean id="test" class="net.jf.ajax.iterceptor.TestInterceptor"/>
</beans>

?q样Q在配置DWR的配|文件时Q配|?lt;creator>时用Spring的Creator可以直接用上面的Service?jin)。当 DWRq程hӞ在配|范围内的方法的调用都会(x)被主拦截器拦截,q且遍历、执行所有子拦截器。原有的Service不需要改动,只需要多加一?Spring的配|文Ӟ原有的Service再加一层Aop的轻U?/font>

q是一U实现方法。如果有别的Ҏ(gu)让DWR更安全、有效,请一定告知。:(x)Q?



艑ְ 2006-05-24 00:26 发表评论
]]>
关于DWR与Servlet、安?/title><link>http://www.tkk7.com/aichan/archive/2006/05/10/45321.html</link><dc:creator>艑ְ</dc:creator><author>艑ְ</author><pubDate>Tue, 09 May 2006 17:18:00 GMT</pubDate><guid>http://www.tkk7.com/aichan/archive/2006/05/10/45321.html</guid><wfw:comment>http://www.tkk7.com/aichan/comments/45321.html</wfw:comment><comments>http://www.tkk7.com/aichan/archive/2006/05/10/45321.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/aichan/comments/commentRss/45321.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aichan/services/trackbacks/45321.html</trackback:ping><description><![CDATA[使用DWR做RemoteQ完全绕q传l的MVC框架Q如Struts、WebworkQ单用一个DWRServlet来做控制器。DWR向客L(fng) 暴露?jin)服务端的服务接口,很有可能有没有Q何限制的情况下被客户端调用所暴露的接口。如果用传l的MVC框架Q可以很方便地解军_多问题诸如n份验证?权限控制{。而DWR提供的功能是l客L(fng)暴露服务接口。上面所涉及(qing)的问题却有牉|。不q,解决Ҏ(gu)q是有的。其中之一是使用AOPQ自已实C些拦 截功能,例如l合SpringQ用DWR的Spring整合功能Q给客户端提供一个Spring的BeanQ而这个Bean是经q代理的 QProxyQ。实际上已经保证?jin)n份认证等动作完成?jin)。而我们要多做的是Q写一些Spring的Bean来作拦截器。再在原有的服务上再加上一?AOP。当?dng)DWR对于安全的还是提供了(jin)些设施的Q基于J2EE的安全策略之上。感觉不是十分良好,所以没用,也没深入研究。:(x)P <p>        很多时候,在做w䆾验证?qing)授权的时候可能会(x)用到应用的环境,如ServletContextQSession{。那么在DWR中的服务或拦截器需要用到Sessionq些东西的时候,获取是一件很单的事。通常有两个办?br />        一、用DWR的API。其实是一个静(rn)态的Ҏ(gu)Q极其不推荐。所以示例也免?jin)?br />        二、让DWR自已注入需要的元素Q这里讲的元素仅限于Q?/p> <ul> <li>HttpServletRequest</li> <li>HttpServletResponse</li> <li>HttpSession</li> <li>ServletContext</li> <li>ServletConfig</li> </ul> <p>        做法是在服务里定义方法的时候,把以上的元素作ؓ(f)参数。在Ҏ(gu)体内直接使用卛_。而不必担?j)它的来源,来源是DWR?x)自已根据参数的cd注入。在客户端调 用的时候不需要提供这个参数。ServletContext之类的东西作为ThreadLocal的变量保存v来的。简单的CZ?/p> <p>1、服务代?nbsp;</p> <p><code><font color="#7f0055"><strong>package </strong></font><font color="#000000">net.jf.ajax.session;</font><br /><br /><font color="#7f0055"><strong>import </strong></font><font color="#000000">javax.servlet.http.HttpSession;</font><br /><br /><font color="#7f0055"><strong>public class </strong></font><font color="#000000">Store </font><font color="#000000">{</font><br /><font color="#ffffff">  </font><font color="#7f0055"><strong>public </strong></font><font color="#7f0055"><strong>void </strong></font><font color="#000000">setAttribute</font><font color="#000000">(</font><font color="#000000">String name,String value,HttpSession session</font><font color="#000000">){</font><br /><font color="#ffffff">    </font><font color="#000000">session.setAttribute</font><font color="#000000">(</font><font color="#000000">name,value</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">  </font><font color="#000000">}</font><br /><font color="#ffffff">  </font><font color="#7f0055"><strong>public </strong></font><font color="#000000">String getAttribute</font><font color="#000000">(</font><font color="#000000">String name,HttpSession session</font><font color="#000000">){</font><br /><font color="#ffffff">    </font><font color="#7f0055"><strong>return </strong></font><font color="#000000">(</font><font color="#000000">String</font><font color="#000000">) </font><font color="#000000">session.getAttribute</font><font color="#000000">(</font><font color="#000000">name</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">  </font><font color="#000000">}</font><br /><font color="#000000">}</font></code> <font size="3" /></p> <p><font size="1"><font size="2">2、spring配置文g</font></font></p> <p style="text-align: left;"><font size="1"><font size="2">      <beans><br />            <bean id="store" class="net.jf.ajax.session.Store"><br />            </bean><br />        </beans></font></font></p> <p style="text-align: left;"><font size="1"><font size="2">3、dwr.xml </font></font></p> <p style="text-align: left;"><font size="1"><font size="2"><dwr><br />  <allow><br />    <create creator="spring" javascript="store"><br />        <param name="beanName" value="store"/><br />    </create><br />  </allow><br /></dwr></font></font></p> <p style="text-align: left;"><font size="1"><font size="2">?上的代码?qing)配|文件可以达到目的:(x)DWR与Springl合QDWR直接使用Spring理的Bean作ؓ(f)服务Q当?dng)受Spring理的Bean?能一炚w不减Q复杂的如有着事务理的Bean同样有用?而且管是Spring理的BeanQ方法的参数中有Servlet相关的参敎ͼDWR同样自动注入?/font></font></p> <p style="text-align: left;"><font size="1"><font size="2">         现在去调试页面看看我们暴露的接口?qing)效果如何!在调试页面找到store的服务,点击q去Q可以见到暴露的Ҏ(gu)有两个:(x)</font></font></p> <p class="separator" style="text-align: center; clear: both;"><a style="border: 0pt none ; background-color: transparent; margin-left: 1em; margin-right: 1em;"><img src="http://bbmyth.googlepages.com/store.JPG/store-medium.jpg" alt="" /></a></p> <p style="text-align: left;"><font size="1"><font size="2">         一个是SetAttribute("","",AUTO)Q第三个参数表明自动注入Q客L(fng)只需要提供前两个参数卛_?/font></font></p> <p style="text-align: left;"><font size="1"><font size="2">        一个是GetAttributeQ?ldquo;”QAUTOQ,W二个参数表明自动注入,客户只需要提供一个名字参数取值即可?/font></font></p> <font size="1"><font size="2">        在测试页面提供的输入框中试两个函数QSetAttribute填入name,jeff提交成功Q在GetAttribute函数中填入name获得一个返回|正是jeff。至此,试成功Q?</font></font><img src ="http://www.tkk7.com/aichan/aggbug/45321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aichan/" target="_blank">艑ְ</a> 2006-05-10 01:18 <a href="http://www.tkk7.com/aichan/archive/2006/05/10/45321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 中用资?/title><link>http://www.tkk7.com/aichan/archive/2006/04/13/40859.html</link><dc:creator>艑ְ</dc:creator><author>艑ְ</author><pubDate>Thu, 13 Apr 2006 04:30:00 GMT</pubDate><guid>http://www.tkk7.com/aichan/archive/2006/04/13/40859.html</guid><wfw:comment>http://www.tkk7.com/aichan/comments/40859.html</wfw:comment><comments>http://www.tkk7.com/aichan/archive/2006/04/13/40859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/aichan/comments/commentRss/40859.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/aichan/services/trackbacks/40859.html</trackback:ping><description><![CDATA[        在Web应用中如果自已的E序里面需要用到外部资源文Ӟ配置文gQ,一般会(x)把配|文件放在classes下面或WEB-INF下面。如果加载这l文件的话通常有两U办法。一是写l对路径Q这是最不推荐的Ҏ(gu)。二是引入ServletContextQ从相对路径中获得绝对\径。写相对路径的时候用ServletContext是免不了(jin)的,我的应用服务器是TomcatQ用相对\径找文g都是在Tomcat的Bin文g夹下面找Q所以我只能用ServletContext来找。后来,Z(jin)使程序能qServlet容器q行Q就引入?jin)Spring的资源管理机制?br />       Spring源管理提供了(jin)一个Resource接口Qƈ提供?jin)几个Resource的实现。它们都需要一个String表示的资源的实际位置。依据这个StringQSpring会(x)自动Z选择正确的Resource实现?br />       下面一D代码,我ؓ(f)?jin)得C个资源的位置Q定义了(jin)个属性,一个是file代表文g的\径(相对或绝对)(j)Q一个是Resouce接口的属性。在Spring的Q何Context中都可以通过讄Resource的属性来得到资源的位|?br />       <code><font color="#7f0055"><strong>private </strong></font><font color="#000000">String file;</font><br /><br /><font color="#ffffff">    </font><font color="#7f0055"><strong>private </strong></font><font color="#000000">Resource resource;<br /><br /></font><font color="#3f5fbf" /><font color="#ffffff">    </font><font color="#7f0055"><strong>public </strong></font><font color="#7f0055"><strong>void </strong></font><font color="#000000">setResource</font><font color="#000000">(</font><font color="#000000">Resource resource</font><font color="#000000">) {</font><br /><font color="#ffffff">        </font><font color="#7f0055"><strong>this</strong></font><font color="#000000">.resource = resource;</font><br /><font color="#ffffff">        </font><font color="#7f0055"><strong>try </strong></font><font color="#000000">{</font><br /><font color="#ffffff">            </font><font color="#7f0055"><strong>this</strong></font><font color="#000000">.file = resource.getFile</font><font color="#000000">()</font><font color="#000000">.getAbsolutePath</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">        </font><font color="#000000">} </font><font color="#7f0055"><strong>catch </strong></font><font color="#000000">(</font><font color="#000000">IOException e</font><font color="#000000">) {</font><font color="#000000" /><br /><font color="#ffffff">            </font><font color="#000000">e.printStackTrace</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">            </font><font color="#7f0055"><strong>throw new </strong></font><font color="#000000">RuntimeException</font><font color="#000000">(</font><font color="#000000">e.getMessage</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff">        </font><font color="#000000">}</font><br /><font color="#ffffff">    </font><font color="#000000">}</font><font color="#000000" /><br /><font color="#3f5fbf" /><br /><font color="#ffffff">    </font><font color="#7f0055"><strong>public </strong></font><font color="#7f0055"><strong>void </strong></font><font color="#000000">setFile</font><font color="#000000">(</font><font color="#000000">String file</font><font color="#000000">) {</font><br /><font color="#ffffff">        </font><font color="#7f0055"><strong>this</strong></font><font color="#000000">.file = file;</font><br /><font color="#ffffff">    </font><font color="#000000">}</font></code> <br />    <br />       Spring配置文g如下Q?br />       <bean id="mybean" class="net.jf.mybean"><br />            <property name="resource"><br />                <value>/WEB-INF/config.xml</value><br />            </property><br />        </bean>    <br />    上面的例子是在WebApplicationAContext中的。Spring?x)根据Context的运行环境决定去哪里加蝲资源。如果是ApplicationE序。即使用cMClassPathXmlApplicationContextq样的ContextQSpring则会(x)使用ClassPathSource来代表资源。将?x)在E序q行时的ClassPath中寻找资源。但要注意一炏VSpring目前能找到的资源是在FileSystem中的。而不能找到Jar包里面的资源Q就你的资源的在ClassPath当中。这一点在JavaDoc里有说明。我又是在犯是同L(fng)错误后才惛_L找文。。。嘿。教训啊?br />    q些只是很粗的用法。记下来以备?。。如果有不正或不妥当的地方q望指正。:(x)Q?br />    <img src ="http://www.tkk7.com/aichan/aggbug/40859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/aichan/" target="_blank">艑ְ</a> 2006-04-13 12:30 <a href="http://www.tkk7.com/aichan/archive/2006/04/13/40859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Webwork2.2.2 重返Client Validationhttp://www.tkk7.com/aichan/archive/2006/03/30/38279.html艑ְ艑ְThu, 30 Mar 2006 08:47:00 GMThttp://www.tkk7.com/aichan/archive/2006/03/30/38279.htmlhttp://www.tkk7.com/aichan/comments/38279.htmlhttp://www.tkk7.com/aichan/archive/2006/03/30/38279.html#Feedback9http://www.tkk7.com/aichan/comments/commentRss/38279.htmlhttp://www.tkk7.com/aichan/services/trackbacks/38279.html       C(jin)Webwork2.2.2q个版本Q有个好消息来了(jin)。Webwork重新支持客户端验证。于是马上抢先试?jin)试?br />
       客户端验证的例子可见Webwork自还的例?ldquo;showcase”。用客L(fng)验证大体上跟以前的服务器端验证相|只是多了(jin)一些步骤。完整的有以下几个步骤:(x)
       一、编写XXXAction-alias-validation.xmlQ-验证配置文g?/font>文g攑֜需要验证的Actioncd一目录下,alias是可选项Q如果有几个Action使用?jin)同一个ActioncR而你惛_其中一个Actionq行验证Q那么alias是那个Action的名字。如QPersonAction.javaQ被editPerson,savePerson,deletePerson{Action使用刎ͼ而仅需要对savePersonq个动作来验证时Q配|文件名字就是:(x)PersonAction-savePerson-validation.xml。Webwork支持的客L(fng)验证cd有:(x)
  • required validator
  • requiredstring validator
  • stringlength validator
  • regex validator
  • email validator
  • url validator
  • int validator
  • double validator

       二、配|Xwork.xmlQ保证拦截器栈里有Validation的拦截器
       三、编写JspQVM或FTLQ?/font>q里有几个需要注意的地方?br />       1.在Jsp加上一个Head标签Q?/font><ww:head/>的结果是生成两个Css样式的链接:(x)
<link rel="stylesheet" href="/bean/webwork/xhtml/styles.css" type="text/css"/>
<link rel="stylesheet" href="/bean/webwork/jscalendar/calendar-blue.css" type="text/css"/>
主要是获取显C错误是的样式?br />       2、?lt;ww:form>Q很遗憾我们只能够用Webwork的UI标签Q这h能用到她的客户端验证机制。在q里要抱怨一下。?lt;ww:form>的标{是挺方便,但是在特定的场合Q我们必M用自已的样式和风格的布局。而W(xu)ebwork默认的XHTML主题的标{会(x)把布局搞ؕ。当?dng)我可以用Simple主题的。但是在需要客L(fng)验证的时候,Simple主题是行不通的。也是说要求主题必LXHTML以上。。或者自定义的主题(自已提供错误信息报告功能Q。呵。没办法Q先就着用XHTML吧?br />       ?lt;ww:form>的标{N使用namespace ?qing)Action属性。如果你的Action?foo/bar/new.action那么Q你必须q样写:(x)
       <ww:form namespace="/foo/bar" action="new"  validate="true"/>
validate="true"一句将?x)在客户端生成一句:(x)
   <script src="/bean/webwork/xhtml/validation.js"></script>
如果你这样写Q?br />       <ww:form action="/foo/bar/new.action" validate="true"/>Q你得不到客户端验证。要注意Q这个细节不容忽视。我被这个小问题搞大头了(jin)。后来查文档的时候才知道Webwork已经提醒我们要像上一U写法那样写。因为她要知道哪个名字空间下的哪个Action需要被验证Q看吧。这是心(j)急的错。不看文档后果就自负?br />       以上两种写法Q在面上生成Js的结果是不一L(fng)。第一U写法会(x)在页面上生成相应的验证规则。第二种写法生成的JsQ只是简单清楚报错信息然后提交请求到服务器,由服务器来验证?br />
       只需要这三步QW(xu)ebwork2.2.2的客L(fng)验证功能q是用了(jin)。感觉还?sh)错。唯一U闷的还是Webwork强制我什么用她的模ѝ?br />       Ps:有很多示例代码没同脓(chung)出来Q是有原因D。现在编辑是使用FCKEditorQ另外两个Editor在我的机子上变成?jin)白痴。出错、完全不能编辑。。。手上又没有好的“XML?HTML”的好工具。。所以没把代码脓(chung)上来。。详情,可以看Webwork的Showcase。这东西太出彩了(jin)。:(x)P

艑ְ 2006-03-30 16:47 发表评论
]]>
Webwork Forward 2 htmlhttp://www.tkk7.com/aichan/archive/2006/03/26/37420.html艑ְ艑ְSat, 25 Mar 2006 16:33:00 GMThttp://www.tkk7.com/aichan/archive/2006/03/26/37420.htmlhttp://www.tkk7.com/aichan/comments/37420.htmlhttp://www.tkk7.com/aichan/archive/2006/03/26/37420.html#Feedback4http://www.tkk7.com/aichan/comments/commentRss/37420.htmlhttp://www.tkk7.com/aichan/services/trackbacks/37420.htmlWeb览器是否能正确昄一个Web通常依赖两个条gQ?br />一、页面的~码Q文件编码)(j).
二、该定义的contentType.

其中面的编码是军_性的因素。两者一致是Q浏览器?x)正常显C内容,否则有可能生ؕ码现像?/font>

如果一个Html文gQ文件编码ؓ(f)UTF-8。contentType设ؓ(f)相同。则使用IE或Firefox查看Q两者都?x)自动选择正确的编码Ş式来解释。当我将contentType设ؓ(f)GB2312Q以Z(x)造成qQ结果不?x)。我认ؓ(f)原因是这L(fng)Q文件编码v军_作用Q加上Utf-8包括?jin)GB该有的字W,所以这U情冉|以大的来认识的。没问题。(不知是否有理解错? QPQ?/font>

上述情况Z用浏览器直接把开|页文g的结果。当我用Webwork的ActionӞHtml文g作ؓ(f)l果Ӟl果cd为dispatcherQ,q出现?jin)!文g~码为UTF-8Q页面定义的ContentType为UTF-8。但是偏偏用IE?qing)FireFox均得Cؕ码的l果。郁闷中用Firefox查看?jin)页面的属性,惊奇地发现页面编码居然是GB2312。我猜想是Webwork在Dispatch面的时候用了(jin)默认的编码,把本来UTF-8~码的页面重新用GB2312~码一ơ。于是试着在Action里面获得Responseq把字符~码改ؓ(f)UTF-8。最后发现结果依然一栗这Ӟ我觉得在Action完成后,W(xu)ebwork接下来用了(jin)ResponseQ我的设|被重置?jin)。于是决定自已写一个ServletQ指定字W编码ؓ(f)UTF-8Q结果直接Forward到我的Html面。结果正了(jin)Q再查看面信息Q两者都是UTF-8?jin)?br />

qx(chng)使用Webwork来Dispatch的都是JspQ不曑և现过q样的情c(din)原因是Jsp仍需要编译,~译时会(x)dJsp面指定的ContentType来决定Response里的字符~码。HTML文g则不一栗这时只能用默认编码。如果我的工E是Gb2312Q那Ҏ(gu)׃存在刚才所讲的问题的?/font>



艑ְ 2006-03-26 00:33 发表评论
]]>
վ֩ģ壺 AV鶹Ʒ| ÿƬѵƵ| žAV뾫ƷëƬ| ŷƷһ | һ߹ۿ| Ƶѹ| a߹a| þƵ| þþѹ۳ӰԺ| ձ岻Ļ| ѿavһ| ޹߶ | ĻmvߵӰ | vaþþþ | ŷɫƷƵ| 㽶Ʒþ| ĻAVһ| һƬ߹ۿ| ձԺ޺Ժ| Ůֻˬ߹ۿ| ˿Ů͵ԲĻ| ޹Ʒպ| ҰƵۿ| һƬaѲſ֮| Ʒȫѹۿ| ŮƵ| ѹۿһëƬ| Ļ߾Ʒַ| ҹƵ| ƵƷ| Ƶѹۿ| 椸ֻƵ| ëƬѲ| ӰԺһҳСƵ߹ۿ| ߹ۿ˳Ƶɫ9| ˳Ƶ| Ƶѹۿ97 | ŮƵƵaѴȫƵ| һ| 㽶Ƶ߹ۿ| ԰߹ۿ91|