??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲不卡av不卡一区二区,亚洲成aⅴ人片久青草影院,亚洲av片在线观看http://m.tkk7.com/yuwenlin/http://m.tkk7.com/yuwenlin/zh-cnSun, 11 May 2025 01:47:44 GMTSun, 11 May 2025 01:47:44 GMT60Annotation 随记http://m.tkk7.com/yuwenlin/archive/2010/08/10/328426.html独孤?/dc:creator>独孤?/author>Tue, 10 Aug 2010 08:47:00 GMThttp://m.tkk7.com/yuwenlin/archive/2010/08/10/328426.htmlhttp://m.tkk7.com/yuwenlin/comments/328426.htmlhttp://m.tkk7.com/yuwenlin/archive/2010/08/10/328426.html#Feedback1http://m.tkk7.com/yuwenlin/comments/commentRss/328426.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/328426.html 其实很早出现在E序员的视野Q只是关注的比较?yu)?x)@Override、@SuppressWarnings("unchecked")Q开始主要觉得没什么用处,后来公司的框架用到它Q感觉还不错。。于是来一讎ͼ(x)

在网上搜Annotation的学?fn)资料不是很多,q是用的Z?img src="/CuteSoft_Client/CuteEditor/images/emembarrassed.gif" alt="" align="absmiddle" border="0" />Q比较经典的入门是q个Q?a target="_blank" title="实战:(x)设计自己的Annotation" >实战:(x)设计自己的AnnotationQ很清楚Q通俗易懂Q这里我׃赘述了。然而仅仅是弄懂它是怎么回事Q具体还是没什么用处,q也是大多数开发h员的感觉?br />
在现在的公司的经历两ơ框架升U,W一ơ没有用到AnnotationQxml配置文g大行光QAction跌{、Ibatis sqlmapper、Form表单(我们的表单都是从后台生成?Q整个项目xmlD~ؕQ每个模块都有自׃属的配置文gQ然后集中到一起处理,而我们最痛苦的莫q于写那大量重复的配|文件?br />
后来公司接了个ERP的单子,技术ȝ马上意识到框架该升了,他技术很牛,我们公司的框架就是他一人写的,两周之后Q新框架出炉Qxml只保留三分之一QAction跌{、Form表单都不再用xml配置Q而是Annotation横空ZQ给我的感觉Q它?yu)像一个救世主Q让我们的框枉生,它就是这ơ升U的最大亮点,只有sqlmapper依然保留Q这无可厚非Q因为它原本是ibatis装的,Action控制器既不是Struts1QStruts2Q也不是WebworkQ是ȝ自己装的ServletQForm表单都由后台生成jslg抛到前端Q通过反编译看到源码,其实q是很基的,贴些代码上来看下吧:(x)

1.Actionh部分Q?br />
    /**
     * 昄新增面
     * author YuWenLin
     * date 2010-5-13 上午10:31:57
     * 
@param data
     
*/
    @Action(
"/add.shtml")
    @Permission(
"client.ContractType.add")
    
public void add(ActionData data){
        FormBuilder builder 
= data.getService(FormBuilder.class);
        builder.append(Type.
class);
        builder.setAction(
"client/contract/type/add.do");
        data.put(
"script", builder);
        
//向页面抛出cookie提示信息
        MessageUtil.putMessage(data);
        data.setResulter(
"template");
        data.setPath(
"client/contract/type/type.shtml");
    }
可能大家看得不太明白(每个公司都有自己框架)Q没有关p,׃句:(x)
@Action("/add.shtml")
它就是负责请求显C新增的面Q就q一句,不需要像我们以前的action.xml(cMStruts2的蟩?Q干净利烦吧,当然底层后台有处理,但是公共的,不需我们,至于
@Permission("client.ContractType.add")
是用来处理权限理的,也是Annotation的用,p一句。就权限理Q后面我也会(x)记述。。?br />
2.再来看看@Action底层的定义:(x)
package org.plugbase.action;

import java.lang.annotation.Annotation;

public interface Action
    
extends Annotation
{

    
public abstract String value();
}
说明下:(x)extends Annotation?@interface是一L(fng)效果Q只不过前者手动extendsQ后者自动的?br /> 怎么P很基吧,跟jdk源码是一L(fng)。。?br />
3.JavaBean生成表单Q?br />
    @Widget(value="TextBox")
    @Valider({
"notempty","len(2,8)"})
    
public void setName(String name) {
        
this.name = name;
    }
lsetterҎ(gu)加AnnotationQ@Widget是组Ӟ@Valider是验?br /> 意思就是给name字段生成TextBoxlgQƈ做验证处理,后台有相应的公共jslgQ验证控件库调用Q我们所有的表单lg都是q样生成的,说实话,q样生成一个页面真有点J锁Q既要写jsQ又要写后台Q前端还要配Q还真是有技术含量,呵呵。。。但是它保证一致性,所有表单组Ӟ验证控gQ如TextBox我们只有一套,所有h都去调用q一套,不得再重造,因ؓ(f)它是框架。。?br />
4.@Widget底层定义Q?br />
import java.lang.annotation.Annotation;

public interface Widget
    
extends Annotation
{

    
public abstract String value();

    
public abstract String defaultValue();

    
public abstract String dataType();

    
public abstract String dataSource();
}
@ValidercMQ当然这些都只是定义、声明,具体怎么用,q里׃贴了Q毕竟是人家东西?br />
怎么P看到q些Q似乎觉得Annotation开始v作用了,其实我一直觉得,Annotation是为xml所生,因ؓ(f)它们俩是d_(d)不管单一地用谁,都有~陷Q?br /> 只有l合才是完善Q正所谓,没有最好,只有更好Q合理就行?br />
在这里我可能没有贴出什么@Annotation技术含量的东西Q但是我惌表达的是一U思想Q一U框架的思想Qƈ不是什么地斚w能用到AnnotationQ一般的中小型项目根本没必要用它Q因为xml搞定,所以用在需要用的地方,它的能量发挥到最大。。?br />
以上仅ؓ(f)一家之aQ欢q拍砖。。?br />


]]>
Ibatis q阶http://m.tkk7.com/yuwenlin/archive/2010/04/01/317148.html独孤?/dc:creator>独孤?/author>Thu, 01 Apr 2010 03:35:00 GMThttp://m.tkk7.com/yuwenlin/archive/2010/04/01/317148.htmlhttp://m.tkk7.com/yuwenlin/comments/317148.htmlhttp://m.tkk7.com/yuwenlin/archive/2010/04/01/317148.html#Feedback0http://m.tkk7.com/yuwenlin/comments/commentRss/317148.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/317148.html阅读全文

]]>
Jquery ThickBox的?/title><link>http://m.tkk7.com/yuwenlin/archive/2010/03/26/316662.html</link><dc:creator>独孤?/dc:creator><author>独孤?/author><pubDate>Fri, 26 Mar 2010 09:47:00 GMT</pubDate><guid>http://m.tkk7.com/yuwenlin/archive/2010/03/26/316662.html</guid><wfw:comment>http://m.tkk7.com/yuwenlin/comments/316662.html</wfw:comment><comments>http://m.tkk7.com/yuwenlin/archive/2010/03/26/316662.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/yuwenlin/comments/commentRss/316662.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yuwenlin/services/trackbacks/316662.html</trackback:ping><description><![CDATA[thickbox是jQuery的一个插Ӟ其作用是弹出对话框、网|Q用户体验度更加愉(zhn),下面来单介l它的几U用法?br /> 声明一下:(x)q只是个人的ȝ记蝲而已?br /> 准备工作Q你需要三个文Ӟ(x)thickbox.js、thickbox.css、jquery.jsQ网上到处可?br /> 具体使用Q?br /> W一步:(x)这三个文g引入C要用thickbox的页?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">script type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/javascript</span><span style="color: #000000;">"</span><span style="color: #000000;"> src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">jquery.js</span><span style="color: #000000;">"</span><span style="color: #000000;">></</span><span style="color: #000000;">script</span><span style="color: #000000;">></span><span style="color: #000000;"> <br />     </span><span style="color: #000000;"><</span><span style="color: #000000;">script type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/javascript</span><span style="color: #000000;">"</span><span style="color: #000000;"> src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox.js</span><span style="color: #000000;">"</span><span style="color: #000000;">></</span><span style="color: #000000;">script</span><span style="color: #000000;">></span><span style="color: #000000;"><br />     </span><span style="color: #000000;"><</span><span style="color: #000000;">link rel</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">stylesheet</span><span style="color: #000000;">"</span><span style="color: #000000;"> href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox.css</span><span style="color: #000000;">"</span><span style="color: #000000;"> type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/css</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">/></span></div> W二步:(x)一般简单用就是给<a>标签和Buttond样式Qclass=thickbox<br /> q有是通过thickbox函数调用Q如tb_init()、tb_show()Q见下文?br /> 几种不同用法Q?br /> 1.点击昄囄Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"> </span><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">001.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">img src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">001.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;">/></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span></div> ok,ph?br /> 2.点击按钮或链接:(x)<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">input alt</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#TB_inline?height=300&width=400&inlineId=div1</span><span style="color: #000000;">"</span><span style="color: #000000;"> title</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">shawnliu</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox</span><span style="color: #000000;">"</span><span style="color: #000000;"> type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">button</span><span style="color: #000000;">"</span><span style="color: #000000;"> value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Show</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">/></span><span style="color: #000000;">   <br />    </span><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#TB_inline?height=155&width=300&inlineId=div2&modal=true</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;">Show hidden modal content.</span><span style="color: #000000;"></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    <br />    </span><span style="color: #000000;"><</span><span style="color: #000000;">div id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">div1</span><span style="color: #000000;">"</span><span style="color: #000000;"> style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">display:none</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #000000;"><</span><span style="color: #000000;">P</span><span style="color: #000000;">></span><span style="color: #000000;"><br />      q是一个非模式对话框?br />    </span><span style="color: #000000;"></</span><span style="color: #000000;">P</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #000000;"></</span><span style="color: #000000;">div</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> <br />    </span><span style="color: #000000;"><</span><span style="color: #000000;">div id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">div2</span><span style="color: #000000;">"</span><span style="color: #000000;"> style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">display:none</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #000000;"><</span><span style="color: #000000;">P</span><span style="color: #000000;">></span><span style="color: #000000;"><br />      q是一个模式对话框?br />      </span><span style="color: #000000;"><</span><span style="color: #000000;">p style</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">TEXT-ALIGN: center</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">INPUT id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Login</span><span style="color: #000000;">"</span><span style="color: #000000;"> onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">tb_remove()</span><span style="color: #000000;">"</span><span style="color: #000000;"> type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">submit</span><span style="color: #000000;">"</span><span style="color: #000000;"> value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">  Ok  </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">/></</span><span style="color: #000000;">p</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #000000;"></</span><span style="color: #000000;">P</span><span style="color: #000000;">></span><span style="color: #000000;"><br />    </span><span style="color: #000000;"></</span><span style="color: #000000;">div</span><span style="color: #000000;">></span></div> 说明Q给你要使用thickbox?lt;a>或buttond"#TB_inline?height=300&width=400&",#TB_inline是thickbox固定用法Qheight和width是显C弹出对话框的大参敎ͼ<span style="color: #000000;">inlineId是你要显C的标签或组Ӟ</span>modal是模式与非模式的选择Q当然你q可以接很多你自定义的参?br /> 3.一般在目中用得比较多的就是加载form的页面,如添加,~辑在同一个list列表面Q这时我们就可以添加和~辑都做成thickbox形式Q如下图Q?br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/yuwenlin/aaa.jpg" width="451" height="201" /><br /> 怎样做呢一L(fng)Q给d链接加thickbox样式Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">add.shtml?width=300&height=250</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;">新增</span><span style="color: #000000;"></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span></div> 前提是你得将要显C的面(add.shtml)做好Q然后指定你要显C的大小<br /> ~辑同样是一P(x)先将原信息提取出来,再让用户修改Q?br /> <img alt="" src="http://m.tkk7.com/images/blogjava_net/yuwenlin/bbb.jpg" width="491" height="198" /><br /> 代码也一P(x)<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">edit.shtml?width=300&height=250&nid=item.nid</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">thickbox</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;">~辑</span><span style="color: #000000;"></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span></div> 4.能自己定位到需要用thickbox的元素,不用样式,可以用函敎ͼ如:(x)<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">div id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">PicList</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic01.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">img src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic01s.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;"> border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">/></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"><</span><span style="color: #000000;">a href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic02.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">img src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic01s.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;"> border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">/></</span><span style="color: #000000;">a</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"></</span><span style="color: #000000;">div</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> <br /> $(function() {<br /> tb_init(</span><span style="color: #000000;">"</span><span style="color: #000000;">#PicList a[img]</span><span style="color: #000000;">"</span><span style="color: #000000;">);});</span></div> 5.通过ajax加蝲的页面,thickbox样式?x)失效,解决办法Q?br /> 只要在AJAX载入HTMLq更新到面后执行下以下代码Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">tb_init(</span><span style="color: #000000;">'</span><span style="color: #000000;">.thickbox</span><span style="color: #000000;">'</span><span style="color: #000000;">);</span></div> 6.自定义函数调用:(x)<br /> 如点ȝ图,要显C大?~略图URL只不q在大图URL的后~前加了s:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">div id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">PicList</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"><</span><span style="color: #000000;">img src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic01s.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;"> border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"><</span><span style="color: #000000;">img src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Pic01s.jpg</span><span style="color: #000000;">"</span><span style="color: #000000;"> border</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span><span style="color: #000000;"><br /> </span><span style="color: #000000;"></</span><span style="color: #000000;">div</span><span style="color: #000000;">></span><span style="color: #000000;"><br /> <br /> $(function() {<br /> $(</span><span style="color: #000000;">"</span><span style="color: #000000;">#PicList img</span><span style="color: #000000;">"</span><span style="color: #000000;">).click(function() {<br /> tb_show(</span><span style="color: #000000;">""</span><span style="color: #000000;">,</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.src.substring(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.src.length</span><span style="color: #000000;">-</span><span style="color: #000000;">5</span><span style="color: #000000;">)</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">.jpg</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br /> });});</span></div> 另外Q如果想用其它事Ӟq可以将clickҎ(gu)你想触发thickbox的事件?br /> 下班勒,大概记录到这Q以后再加吧。。?br /> <br /> <br /> <img src ="http://m.tkk7.com/yuwenlin/aggbug/316662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yuwenlin/" target="_blank">独孤?/a> 2010-03-26 17:47 <a href="http://m.tkk7.com/yuwenlin/archive/2010/03/26/316662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>_NHibernate——映一对多兌关系http://m.tkk7.com/yuwenlin/archive/2009/10/16/298483.html独孤?/dc:creator>独孤?/author>Thu, 15 Oct 2009 16:29:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/10/16/298483.htmlhttp://m.tkk7.com/yuwenlin/comments/298483.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/10/16/298483.html#Feedback2http://m.tkk7.com/yuwenlin/comments/commentRss/298483.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/298483.html在域模型(实体?中,兌关系是类与类之间最普遍的关pR根据UML语言Q关pL有方向的。下面以客户(Customer)和订?Order)的关pMؓ(f)例,阐述一下ORM的中的一对多映射Q?br /> 我们知道Q在关系数据库中Q只存在外键参照关系Q而且L?#8220;many”方参?#8220;one“斏V?br /> 1.建立多对一单向兌——Order(many)--->Customer(one)Q?br /> -------------------------------Order.java--------------------------------

pack mypack;
import java.io.Serializable;
public class Order implements Serializable{
   
private int id;
   
private String orderNumber;
   
private Customer customer;
   
   
//构造方法及(qing)setҎ(gu)getҎ(gu)
   
}
在以上代码中customer属性要使用<many-to-one>来映:(x)
多对一单向兌(many?
<many-to-one>
    name 
= "customer"   --待映的持久化类属性名
    column 
= "customer_Id"  --数据库外键字D?br />     class = "mypack.Customer"  --持久化类
    not
-null = "true"/>
a.  <many-to-one>的not-null属?/strong> 
not-null属性会(x)影响Hiberntae的运行时行ؓ(f)QHibernate在保存Order对象Ӟ?x)先查它的customer属性是否ؓ(f)nullQ?br /> 若ؓ(f)nullQ在执行session.save(Order)时会(x)抛出PropertyValueException异常Q?br /> 原因很简单:(x)既然Customer为nullQ那么对应的外键Customer_Id也ؓ(f)nullQ试问外键都没有QOrder表的数据能插得进d
若将not-null 属性设为falseQ表C外键引用可以ؓ(f)nullQ试想一下,数据库数据可以插q去吗?
我们来看Q在执行session.save(Order)Ӟ发出了sql语句Qinsert into......
但是当Hibernate自动清理(flush)~存Ӟ抛出新的异常QTransientObjectException
所谓清理是提交事务或手动FlushQ将session与数据库保持同步Q很昄不可能同步嘛QOrder对象虽然持久化,但Customer没有.
    注:(x)是否应该?lt;many-to-one>的not-null属性设为trueQ这Ҏ(gu)实际业务而定。通常Q订单L由客戯己发出,因此设ؓ(f)true.
b.  U联保存与更?/strong>
默认情况下,Hibernate持久化一个对象,不会(x)自动持久化所兌的其它(f)时对象,因此?x)有TransientObjectExceptionQ?br /> 惛_兌也可以,<many-to-one>中加个属性cascade="save-update"卛_.

2.建立一对多兌——Customer(one)--->Order(many)Q?br /> -----------------------------Customer.java-------------------------------
package mypack;
import 
public calss Customer implements Serlizliab;e{
    
private int id;
    
private String name;
    
private Set orders = new HsahSet();

    
//构造方法及(qing)setҎ(gu)getҎ(gu)
}
一对多兌(one?
<set 
      name 
= "orders"  --持久化对象的属?br />       cascade = "save-update" --U联操作
      
<key cloumn = "customer_Id"/> --外键
      
<one-to-many class = "mypack.Order"/> --持久化类
</set>
a.  <set>元素的inverse属?/strong>
  在映一对多的双向关联时Q应该在“one”Ҏ(gu)inverse属性设为trueQ这样可提高应用性能?br />                     inverseQ控制反转,为true表示反{Q由它方负责Q反之,不反转,自己负责Q?br />                     如果不设Qone和many两方都要负责控制Q因此,?x)引发重复的sql语句以及(qing)重复d数据Q?br />         在徏立两个象的双向关pLQ应该同时修改关联两端的对象属性:(x)
                    customer.getOrders().add(order);
                    order.setCustomer(customer);

        q样做可提高业务逻辑的独立性,使业务逻辑的程序代码不受Hibernate实现的媄响。同理解除双向关pM一栗?br /> b.  U联删除(从数据库删除相关表记?
         当删除Customer对象Ӟ?qing)联删除Order对象.只需cascad属性设为delete卛_.
          注:(x)删除后的对象Q依然存在于内存中,只不q由持久化态变Z(f)时?
c.  父子关系(逻辑删除Q只是解除了兌关系)
         自动删除不再和Customer对象兌的Order对象.只需cascade属性设为delete-orphan.
                     customer.getOrders().remove(order);
                     order.setCustomer(null);
          注:(x)当关联双斚w存在父子关系Q就可以把父方的cascade属性设为delete-orphanQ所谓父子关p,是由父方来控制子方的生命周期.
                     
       




]]>
My97DatePicker(日期控g)的用及(qing)问题http://m.tkk7.com/yuwenlin/archive/2009/05/14/270519.html独孤?/dc:creator>独孤?/author>Wed, 13 May 2009 16:28:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/05/14/270519.htmlhttp://m.tkk7.com/yuwenlin/comments/270519.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/05/14/270519.html#Feedback9http://m.tkk7.com/yuwenlin/comments/commentRss/270519.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/270519.htmlMy97DatePicker是一N常灵zd用的日期控gQ在本次目中我使用它暴露了很多问题Q?/p>

首先来说使用步骤Q?/p>

1.在My97DatePicker主页下蝲控gQ?/p>

目前的版本是:4.2 正式?发布?008-12-03

http://www.my97.net/dp/down.asp

2.文件解压包(一个文仉不要删除)拯到classpath/webroot?/p>

3.直接使用<script />引入Q?/p>

<script type="text/javascript" defer="defer" src="<%=request.getContextPath() %>/My97DatePicker/WdatePicker.js"></script>

4.?lt;input type="text"/>中调用:(x)

<input type="text" name="time" onfocus="WdatePicker()">

其次来说一下我在用中到的问题:(x)

1.IE?无法打开internet站点 。。。。。已l止操作

q个问题搞了好半天,|上到处查,最后才在csdn上看到解军_法:(x)

a.如果面?lt;base/>标签的:(x)则要在第3步js引入后添?lt;base target="_self" />;

b.?lt;script/>中添加属性defer="defer"; //是q具属性救了我

2.在步?中调用了Q结果不出来Q?/p>

开始以为是stuts1.2 标签的原因,l果不是Q后来反复测试,才搞定了

其实调用的时候有很多Ҏ(gu)Q然而有的方法不一定出得来Q所以要反复试

q是My97DatePicker的主:(x)http://www.my97.net

里面有控件下载,使用演示Q问题解决等



]]>
AJAX开发简?(W二部分)(?http://m.tkk7.com/yuwenlin/archive/2009/03/29/262756.html独孤?/dc:creator>独孤?/author>Sun, 29 Mar 2009 12:11:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/03/29/262756.htmlhttp://m.tkk7.com/yuwenlin/comments/262756.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/03/29/262756.html#Feedback0http://m.tkk7.com/yuwenlin/comments/commentRss/262756.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/262756.html阅读全文

]]>
AJAX开发简?W一部分)(?http://m.tkk7.com/yuwenlin/archive/2009/03/29/262730.html独孤?/dc:creator>独孤?/author>Sun, 29 Mar 2009 08:27:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/03/29/262730.htmlhttp://m.tkk7.com/yuwenlin/comments/262730.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/03/29/262730.html#Feedback0http://m.tkk7.com/yuwenlin/comments/commentRss/262730.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/262730.html因ؓ(f)正在自学AjaxQ看C?a >柯自?/a>的这《AJAX开发简略》写得不错,拿来{载一下:(x)

         在用浏览器览|页的时候,当页面刷新很慢的时候,你的览器在q什么?你的屏幕内容是什么?是的Q你的浏览器在等待刷斎ͼ而你的屏q内Ҏ(gu)一片空白,而你在屏q前苦苦的等待浏览器的响应。开发h员ؓ(f)了克服这U尴的局面,不得不在每一个可能需要长旉{待响应的页面上增加一个DIVQ告诉用?#8220;pȝ正在处理(zhn)的hQ请E?#8230;…”?

  现在Q有一U越来越行热?#8220;?#8221;技术,可以d改变q种H迫的局面。那是AJAX。如今,随着Gmail、Google-maps的应用和各种览器的支持QAJAX正逐渐吸引全世界的眼球?/p>

一、AJAX定义
   AJAXQAsynchronous JavaScript and XMLQ其实是多种技术的l合Q包括Javascript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest。其中:(x)

  使用XHTML和CSS标准化呈玎ͼ使用DOM实现动态显C和交互Q用XML和XSTLq行数据交换与处理,使用XMLHttpRequest对象q行异步数据dQ用Javascriptl定和处理所有数据?/p>

  在AJAX提出之前Q业界对于上q技术都只是单独的用,没有l合使用Q也是由于之前的技术需求所军_的。随着应用的广泛,AJAX也成为香饽饽了?/p>

二、现状与需要解决的问题
  传统的Web应用采用同步交互q程Q这U情况下Q用户首先向HTTP服务器触发一个行为或h的呼求。反q来Q服务器执行某些dQ再向发求的用户q回一个HTML面。这是一U不q诏的用户体验,服务器在处理h的时候,用户多数旉处于{待的状态,屏幕内容也是一片空白。如下图Q?

        自从采用文本作为Web传输和呈C后,我们都是采用q么一套传输方式。当负蝲比较?yu)的时候,qƈ不会(x)体现出有什么不妥。可是当负蝲比较大,响应旉要很长,1分钟?分钟……数分钟的时候,q种{待׃可忍受了。严重的Q超q响应时_(d)服务器干脆告诉你面不可用。另外,某些时候,我只是想改变面一部分的数据Q那Z么我必须重新加蝲整个面呢?Q当软g设计来讲Ih性化的时候,q么p糕的用户体验简直与q种原则背道而驰。ؓ(f)什么老是要让用户{待服务器取数据呢?臛_Q我们应该减用L(fng)待的旉。现在,除了E序设计、编码优化和服务器调优之外,q可以采用AJAX?/p>

三、ؓ(f)什么用AJAX
  与传l的Web应用不同QAJAX采用异步交互q程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了|络交互q程中的处理—等待—处理—等待缺炏V用L(fng)览器在执行d时即装蝲了AJAX引擎。AJAX引擎用JavaScript语言~写Q通常藏在一个隐藏的框架中。它负责~译用户界面?qing)与服务器之间的交互。AJAX引擎允许用户与应用Y件之间的交互q程异步q行Q独立于用户与网l服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替生一个HTTP的用户动作,内存中的数据~辑、页面导航、数据校验这些不需要重新蝲入整个页面的需求可以交lAJAX来执行?/p>

使用AJAXQ可以ؓ(f)ISP、开发h员、终端用户带来可见的便捷Q?

  • 减轻服务器的负担。AJAX的原则是“按需取数?#8221;Q可以最大程度的减少冗余hQ和响应Ҏ(gu)务器造成的负担?
  • 无刷新更新页面,减少用户心理和实际的{待旉。特别的Q当要读取大量的数据的时候,不用像Reload那样出现白屏的情况,AJAX使用XMLHTTP对象发送请求ƈ得到服务器响应,在不重新载入整个面的情况下用Javascript操作DOM最l更新页面。所以在d数据的过E中Q用h面对的不是白屏,是原来的面内容Q也可以加一个Loading的提C框让用L(fng)道处于读取数据过E)Q只有当数据接收完毕之后才更新相应部分的内容。这U更新是瞬间的,用户几乎感觉不到?
  • 带来更好的用户体验?
  • 可以把以前一些服务器负担的工作{嫁到客户端,利用客户端闲|的能力来处理,减轻服务器和带宽的负担,节约I间和宽带租用成本?
  • 可以调用外部数据?
  • Z标准化的q被q泛支持的技术,不需要下载插件或者小E序?
  • q一步促q页面呈现和数据的分R?

四、谁在用AJAX
  在应用AJAX开发上面,Google当仁不让是表率。Orkut、Gmail、Google Groups、Google Maps、Google Suggest都应用了q项技术。Amazon的A9.com搜烦引擎也采用了cM的技术?

  微Y也在U极开发更为完善的AJAX应用Q它卛_推出代号为Atlas的AJAX工具。Atlas的功能超了AJAX本nQ包括整合Visual Studio的调试功能。另外,新的ASP.NET控g客户端控件与服务器端代码的捆l更为简ѝAtlas客户脚本框架QAtlas Clent Script FrameworkQ也使与|页?qing)相关项目的交互更?f)便利。但Visual Studio 2005中ƈ不包含此功能?/p>

  微Y最q宣布Atlas客户脚本框架包含如下内容(详细资料误问Atlas计划|站Q:(x)

  • 一个可扩展的核心框Ӟ它添加了JavaScript功能Q如生命同时期管理、承管理、多点传送处理器和界面管理?
  • 一个常见功能的基本cdQ有丰富的字W串处理、计时器和运行Q务?
  • 为HTML附加动态行为的用户界面框架?
  • 一l用来简化服务器q通和|络讉K的网l堆栈?
  • 一l丰富的用户界面开发控Ӟ如:(x)自动完成的文本框、动d拖放?
  • 处理览器脚本行为差异的览器兼容层面?

        典型的,微YAJAX技术应用在MSN Space上面。很多h一直都对MS Space服务感到很奇怪,当提交回复评Z后,览器会(x)暂时停顿一下,然后在无h的情况下把我提交的评论显C出来。这个就是应用了AJAX的效果。试惻I如果d一个评论就要重新刷新整个页面,那可真费事?

  目前QAJAX应用最普遍的领域是GIS-Map斚w。GIS的区域搜索强调快速响应,AJAX的特Ҏ(gu)好符合这U需求?/p>

五、用AJAX改进你的设计
   AJAX虽然可以实现无刷新更新页面内容,但是也不是什么地斚w可以用,主要应用在交互较多、频J读数据、数据分c良好的Web应用中。现在,让我们D两个例子Q看看如何用AJAX改进你的设计?a>

例子1Q数据校?br />   在输入form表单内容的时候,我们通常需要确保数据的唯一性。因此,常常在页面上提供“唯一性校?#8221;按钮Q让用户点击Q打开一个校验小H口Q或者等form提交到服务器端,由服务器判断后在q回相应的校验信息。前者,window.open操作本来是比较耗费资源的,通常由window. showModalDialog代替Q即使这样也要弹Z个对话框Q后者,需要把整个面提交到服务器q由服务器判断校验,q个q程不仅旉长而且加重了服务器负担。而用AJAXQ这个校验请求可以由XMLHttpRequest对象发出Q整个过E不需要弹出新H口Q也不需要将整个面提交到服务器Q快速又不加重服务器负担?a>例子2Q按需取数据—联菜?br />   以前Qؓ(f)了避免每ơ对菜单的操作引L(fng)重蝲面Q不采用每次调用后台的方式,而是一ơ性将U联菜单的所有数据全部读取出来ƈ写入数组Q然后根据用L(fng)操作用JavaScript来控制它的子集项目的呈现Q这栯然解决了操作响应速度、不重蝲面以及(qing)避免向服务器频繁发送请求的问题Q但是如果用户不对菜单进行操作或只对菜单中的一部分q行操作的话Q那d的数据中的一部分׃(x)成ؓ(f)冗余数据而浪费用L(fng)资源Q特别是在菜单结构复杂、数据量大的情况下(比如菜单有很多、每一U菜又有上百个项目)Q这U弊端就更ؓ(f)H出?

  现在应用AJAXQ在初始化页面时我们只读出它的第一U的所有数据ƈ昄Q在用户操作一U菜单其中一Ҏ(gu)Q会(x)通过Ajax向后台请求当前一U项目所属的二子菜单的所有数据,如果再l请求已l呈现的二菜单中的一Ҏ(gu)Q再向后面请求所操作二菜单对应的所有三U菜单的所有数据,以此cL……q样Q用什么就取什么、用多少取多少Q就不会(x)有数据的冗余和浪费,减少了数据下载总量Q而且更新面时不用重载全部内容,只更新需要更新的那部分即可,相对于后台处理ƈ重蝲的方式羃短了用户{待旉Q也把对资源的浪贚w到最低?/p>

例子3Q读取外部数?br />   AJAX可以调用外部数据Q因此,可以对一些开发的数据比如XML文档、RSS文q行二次加工Q实现数据整合或者开发应用程序?/p>

六、AJAX的缺?/strong>

AJAX不是完美的技术。用AJAXQ它的一些缺陷不得不权衡一下:(x)

  • AJAX大量使用了Javascript和AJAX引擎Q而这个取决于览器的支持。IE5.0?qing)以上、Mozilla1.0、NetScape7?qing)以上版本才支持QMozilla虽然也支持AJAXQ但是提供XMLHttpRequest的方式不一栗所以,使用AJAX的程序必L试针对各个浏览器的兼Ҏ(gu)?
  • AJAX更新面内容的时候ƈ没有h整个面Q因此,|页的后退功能是失效的Q有的用戯l常搞不清楚现在的数据是旧的q是已经更新q的。这个就需要在明显位置提醒用户“数据已更?#8221;?
  • Ҏ(gu)媒体的支持没有FLASH、Java Applet好?
  • 一些手持设备(如手机、PDA{)现在q不能很好的支持Ajax?

 



]]>
四种Action详解http://m.tkk7.com/yuwenlin/archive/2009/03/16/259956.html独孤?/dc:creator>独孤?/author>Mon, 16 Mar 2009 02:43:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/03/16/259956.htmlhttp://m.tkk7.com/yuwenlin/comments/259956.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/03/16/259956.html#Feedback7http://m.tkk7.com/yuwenlin/comments/commentRss/259956.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/259956.html
Struts中有四种不同Action,分别如下Q?
1.Action
2.DispatchAction
3.LookupDispatchAction
4.MappingDispatchAction
关于Action在Struts中的工作程Q这里我׃多说了,只针对各U不同的Action详解
    W一UActionQ是最普通、也是我们最先接触的一U,但它仅支持一U业务方法,Action中只能允许有一个execute()Q所有比较单一Q有局限性,qx的项目中也用的少Q或者说Q它针对的是一个表单,一个SubmitQ?
关于用法QAction中就一个execute()Q而strut-config.xml也只需配置一h普通的<action/>节点Q就够了
<!-- Action -->
    
<action
      attribute
="loginForm"
      name
="loginForm"
      path
="/login"
      scope
="request"
      type
="org.svse.struts.action.LoginAction">
      
<forward name="ok" path="/ok.jsp"></forward>
      
<forward name="error" path="/error.jsp"></forward>      
      
</action>
    W二UDispatchActionQ这是我们在qx的学?fn)和目中用的最多的一U,因ؓ(f)它支持多个业务方法的扩展Q用v来也方便Q或者说Q它针对的是一个表单,多个ButtonQ?
关于用法QAction中需要几个业务方法,复制几个execute()Q然后改名即可,比如我们做加、减、乘、除Q有四个Ҏ(gu)Q即Qadd(),sub(),mul(),div();而struts-config.xml中也只需配一?lt;action/>节点Q当Ӟ在涉?qing)到有的业务是否需要表单验证时Q可以单独再d节点?
<!-- DispatchAction -->
    
<action
      attribute
="calForm"
      name
="calForm"
      parameter
="method"
      path
="/cal"
      scope
="request"
      type
="org.svse.struts.action.CalAction">
      
<forward name="result" path="/cal_result.jsp"></forward>
      
</action>
parameter参数对应的就是我们的业务Ҏ(gu)?在三UDispatchAction中都要用到它,因ؓ(f)有了?可实现多业务的调用;
哪我们在视图?是如何调用的?很简?/cal.do?method=Ҏ(gu)?add、sub)
<script type="text/javascript">
        function dosubmit(url)
{
            var myform 
= document.myform;
            myform.action 
= url;
            myform.submit();
        }

    
</script>
  
</head>
  
  
<body>
  
<!-- 一个表单多个按?nbsp;-->
  
<form method="post" name="myform">
       W一个数:
<input type="text" name="num1"><br>
       W二个数:
<input type="text" name="num2"><br>
       
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=add')">
       
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=sub')">
    
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=mul')">
       
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=div')"> 
  
</form>
  
</body>
    W三ULookupDispatchActionQ此UAction恐怕是我们qx用的最的一U了Q尽它也支持多业务Q或者说Q它针对的是一个表单,多个SubmitQ?/span>
但用h非常ȝQ需要struts标签,资源文g,Action中要Map集合;q里大概说一?
Actoin中业务方法跟上面一?只不q多一个包含Map的方?
//通过资源文g的key(button.add),来找C务方法add(),sub()
    protected Map getKeyMethodMap() {
        Map map 
= new HashMap();
        map.put(
"button.add","add");
        map.put(
"button.sub","sub");
        
return map;
    }
资源文gQ?
# Resources for parameter 'org.svse.struts.ApplicationResources'
# Project ch03
button.add
=add
button.sub
=sub
struts-config.xml也跟上面一?Ҏ(gu)method来找;
哪视囄件如何来调用?
<!-- 一个表单多个提?nbsp;-->
    
<form action="cal2.do" method="post">
          num1:
<input type="text" name="num1"/><br>
          num2:
<input type="text" name="num2"/><br>
          
<html:submit property="method">
              
<bean:message key="button.add"/>
          
</html:submit>
          
<html:submit property="method">
              
<bean:message key="button.sub"/>
          
</html:submit>
    
<form>
怎么样够ȝ的吧。。?
    W四UMappingDispatchActionQ我自认为它比DispatchAction差不多好用,只是它够灉|(q里针对<action/>节点Q想咋配咋配)Q或者说Q它针对的是多个表单Q多个Submit;
关于用法Q也比较单:(x)
Action中的业务实现跟DispatchAction一Pstrut-config.xml则要灉|些,针对每一个业务方法,配一?lt;action/>节点Q?
<!-- MappingDispatchAction -->
    
<!-- add -->
    
<action
      attribute
="calForm"
      name
="calForm"
      parameter
="add"
      path
="/add"
      scope
="request"
      type
="org.svse.struts.action.Cal3Action">
      
<forward name="result" path="/cal_result.jsp" />
    
</action>
    
<!-- sub -->
    
<action
      attribute
="calForm"
      name
="calForm"
      parameter
="sub"
      path
="/sub"
      scope
="request"
      type
="org.svse.struts.action.Cal3Action">
      
<forward name="result" path="/cal_result.jsp" />
    
</action>
视图lg的调用就很能够方便了Q直接跟/path路径?doQ?
<form action="add.do" method="post">
        num1:
<input type="text" name="num1"><br>
        num2:
<input type="text" name="num2"><br>
        
<input type="submit" value="?/span>">
    
</form>
Struts中四UAction用法基本完毕Q此U属本h在学?fn)过E中自己的ȝQ若有不当之处,愿不令赐?!!


]]>
Struts核心标签(原创)http://m.tkk7.com/yuwenlin/archive/2009/03/14/259782.html独孤?/dc:creator>独孤?/author>Sat, 14 Mar 2009 15:47:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/03/14/259782.htmlhttp://m.tkk7.com/yuwenlin/comments/259782.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/03/14/259782.html#Feedback1http://m.tkk7.com/yuwenlin/comments/commentRss/259782.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/259782.html常用的Struts标签库有以下五大c:(x)

1.HTML TagQ?/p>

用来创徏能够和Struts框架以及(qing)其它相应的HTML标签交互的HTML输入表单;

如:(x)<htmlQform></htmlQform>Q?lt;htmlQtext/>Q?lt;htmlQpassword/>Q?lt;htmlQradio/>Q?lt;htmlQcheckbox/>Q?lt;htmlmultibox>

2.Bean Tag

该标{ֺ包含的标{֏以用来创建bean、访问bean和访问bean的属性?/p>

 如:(x)<beanQwrite/>Q用于将bean的属性输送到jsp面Q?lt;beanQdefine/>定义一个新的bean

3.Logic Tag

该标{ֺ包含的标{֏以用来进行逻辑判断、集合P代和程控制?/p>

如:(x)<logicQiterate/>Q用来@环P?<logicQeaual/>Q用来进行逻辑判断

4.NestedQ增强对其他Struts标签的嵌套用能?/p>

该标{ֺ建立在前三个标签库的基础上,h前三个标{ֺ的所有功能,只是允许标签间的嵌套?/p>

5.Template Tag

随着Titles框架包的出现,此标记已开始减?/p>

下面介绍几个最常用的标{:(x)

<htmlQcheck box/>一般用于一个选项的复选框

<htmlQmultibox/>一般用于多个选项的复选框

<beanQwrite name="user" property="username"/>{同于EL表达C:(x)${user.username}

<beanQdefine id="inter" name="user" property="interest" type="java.lang.String"/>定义一个bean

<beanQmessage key=" " arg0=" "/> key 定义在资源文件中Qargs0[1,2]为参?/p>

<logicQiterate name="list" id="user"> {同于JSTL的:(x)<cQfoeach item=${list} var="user"/>

<logicQequal name="user" property="sex" value="0"/>{同于JSTL的:(x)<cQwhen test=""/>

<logicQempty />标签是用来判断是否ؓ(f)I的。如果ؓ(f)I,该标{体中嵌入的内容׃(x)被处?/p>

<logic:empty name="listForm" property = "persons">
<div>集合persons为空!</div>
</logic:empty>

1.下面l一个表单的完整代码Q?/p>

<body>
    
<center>
        
<html:form action="/user">
        用户名:(x)
<html:text property="user.username"></html:text><p/>
        密码Q?/span><html:text property="user.pwd"></html:text><p/>
        性别Q?/span><html:radio property="user.sex" value="?/span>">?/span></html:radio>
            
<html:radio property="user.sex" value="?/span>">?/span></html:radio><p/>
        城市Q?/span><html:select property="user.city">
            
<html:option value="">请选择</html:option>
            
<html:option value="武汉">武汉</html:option>
            
<html:option value="上v">上v</html:option>
            
<html:option value="北京">北京</html:option>
        
</html:select><p/>
        爱好Q?/span><html:multibox property="interest" value="看书"/>看书
            
<html:multibox property="interest" value="游戏"/>游戏
            
<html:multibox property="interest" value="睡觉"/>睡觉<p/>
            
<html:submit/><html:cancel/>
        
</html:form>
    
</center>
    
</body>

使用html标签作ؓ(f)表单输入Q可以方便的使用验证框架卻I(x)<html:errors property="username">

2.下面l一个显C数据的代码Q?/p>

<table align="center" border="1" width="600">
        
<caption>用户注册信息</caption>
        
<tr>
            
<td>用户?/span></td>
            
<td>密码</td>
            
<td>性别</td>
            
<td>城市</td>
            
<td>爱好</td>
            
<td colspan="2" align="center">操作</td>
        
</tr>
        
<logic:iterate name="list" id="user">
        
<tr>
            
<td><bean:write name="user" property="username"/></td>
            
<td><bean:write name="user" property="pwd"/></td>
            
<td><bean:write name="user" property="sex"/></td>
            
<td><bean:write name="user" property="city"/></td>
            
<td>
                
<bean:define id="interest" name="user" property="interest" type="java.lang.String"></bean:define>
                
<logic:iterate id="inter" collection="<%=StringUtil.stringChange2(interest)%>">
                    $
{inter}
                
</logic:iterate>
            
</td>
            
<td><a href="del.do?userid=${user.userid}">删除</a></td>
            
<td><a href="upd.do?userid=${user.userid}">修改</a></td>
        
</tr>
        
</logic:iterate>
    
</table>

作ؓ(f)昄数据QStruts标签q不比Jstl与EL方便Q因此,本h更习(fn)惯用后?/span>

其实Struts标签的好处,q不是上面这些,而是它可利用ActionForm来填充数?/span>

比如我们在做面数据修改的时候,?x)让当前面数据昄到显CZ攚w面,q样利于客户端修?/span>

以前我们q样做的Q根据id从数据库查出Q然后用html的value属性填充,现在有了Struts标签Q就不需要那么麻烦了

直接在Action里填充ActionForm的数据就搞定?/span>Q?/p>

public ActionForward upd(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        UserForm userForm 
= (UserForm) form;
        
int userid = Integer.parseInt(request.getParameter("userid"));
        UserInfo user 
= biz.findUser(userid);
        String[]interest 
= StringUtil.stringChange2(user.getInterest());
        
//用户信息填充到ActionForm
        userForm.setUser(user);
        userForm.setInterest(interest);
        
return mapping.findForward("upd");
    }
然后在修攚w面显C,请往下看Q?/span>
<html:form action="/doupd">
        用户名:(x)
<html:text property="user.username"></html:text><p/>
        密码Q?/span><html:text property="user.pwd"></html:text><p/>
        性别Q?/span><html:radio property="user.sex" value="?/span>">?/span></html:radio>
            
<html:radio property="user.sex" value="?/span>">?/span></html:radio><p/>
        城市Q?/span><html:select property="user.city">
            
<html:option value="">请选择</html:option>
            
<html:option value="武汉">武汉</html:option>
            
<html:option value="上v">上v</html:option>
            
<html:option value="北京">北京</html:option>
        
</html:select><p/>
        爱好Q?/span><html:multibox property="interest" value="看书"/>看书
            
<html:multibox property="interest" value="游戏"/>游戏
            
<html:multibox property="interest" value="睡觉"/>睡觉<p/>
            
<html:submit value="修改"/>
        
</html:form>
怎么P单方便吧Q其实Struts标签q是有它的好处的?

]]>
七种ActionFormhttp://m.tkk7.com/yuwenlin/archive/2009/03/13/259576.html独孤?/dc:creator>独孤?/author>Fri, 13 Mar 2009 09:03:00 GMThttp://m.tkk7.com/yuwenlin/archive/2009/03/13/259576.htmlhttp://m.tkk7.com/yuwenlin/comments/259576.htmlhttp://m.tkk7.com/yuwenlin/archive/2009/03/13/259576.html#Feedback0http://m.tkk7.com/yuwenlin/comments/commentRss/259576.htmlhttp://m.tkk7.com/yuwenlin/services/trackbacks/259576.htmlStruts中最常用的七UActionForm如下Q?/p>

1.ActionForm

2.ValidatorForm

3.ValidatorActionForm

4.DynaActionForm

5.DynaValidatorForm

6.DynaValidatorActionForm

7.LazyValidatorForm

由命名来看,M使用规律如下Q?/p>

1.带有Validator的,但都可用验证框?

2.以Dyna开头的Q都是自动生成相应的formQ只需在Struts-config.xml中配|属性即?/span>

3.中间是否有Action的,表示validation.xml中的form的name名,是跟formbean的名Uͼq是/path路径

下面按规律逐个介绍Q?/p>

1.ActionForm,DynaActionForm此类不支持验证框Ӟ需手动创徏formQƈ实现自定义的validate()Ҏ(gu)

但DynaActionForm是特?它自动生成form)Q所以没有validate()Ҏ(gu)Q所以也׃能验?br /> 2.ValidatorFormQValidatorActionFormQDynaValidatorForm

DynaValidatorActionFormQLazyValidatorForm 此大c都是支持验证框架的,当然也可以完成自定义的validate()Ҏ(gu),来覆盖验证框架的Ҏ(gu)Q其中:(x)

ValidatorFormQDynaValidatorFormQLazyValidatorForm  没有ActionQ是针对form来验证的Q即凡是用到该form的页面,都必验证;

反之QValidatorActionFormQDynaValidatorActionFormQ则是针对Action的,要验证哪个ActionQ就跟那?path路径Qvalidation.xml代码如下Q?/p>

<form-validation>
    
<formset>
        
<!-- 此时针对Action验证,name?/span>/path路径--!>
        
<!--如果是针对form验证Qname则跟formbean的名U?/span>--!>
        
<form name="/login">
            
<field property="username" depends="required">
                
<msg name="required" key="username"/>
            
</field>
            
<field property="pwd" depends="required,minlength">
                
<msg name="required" key="pwd"/>
                
<msg name="minlength" key="pwd1"/>
                
<var>
                    
<var-name>minlength</var-name>
                    
<var-value>6</var-value>
                
</var>
            
</field>
        
</form>
    
</formset>
</form-validation>

针对七种ActionFormQ我们要灉|q用Q需要验证谁Q就让它停下Q不需要的Q让它通过?/p>

 另外介绍下验证框架的使用步骤Q?/p>

1.在validator-rules.xml中引入验证插件的代码Q?/p>

<!--引入验证框架--!>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
                                                  /WEB-INF/validation.xml"/>
      </plug-in>
2.创徏q|validation.xml 文g,代码如下Q?
<!DOCTYPE form-validation PUBLIC
          
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    
<formset>
        
<form name="loginForm">
            
<field property="username" depends="required">
                
<msg name="required" key="username"/>
            
</field>
            
<field property="pwd" depends="required,minlength">
                
<msg name="required" key="pwd"/>
                
<msg name="minlength" key="pwd1"/>
                
<var>
                    
<var-name>minlength</var-name>
                    
<var-value>6</var-value>
                
</var>
            
</field>
        
</form>
    
</formset>
</form-validation>
3.描述.properties资源文gQ来指明验证提示Q当然也可不用,直接声明变量
# Resources for parameter 'ApplicationResources'
# Project ch07
username
=username is null
pwd
=pwd is null
pwd1
=pwd is less than 6
以上来自各方面的学习(fn),加上自己的整?希望与各位豪杰共同探?

]]>
վ֩ģ壺 һѿ| a߹ۿƵ| avɫ㽶һ| aëƬƵѹۿӰԺ| ձһۺϾþa| þ˽˹Ʒ| AѾƷƵ| ˿Ƶ2019| tvۺɫ| www.avѹۿ| պ߹ۿ| ޾ƷĻ| Ļaѿ| ȫɫƴɫƬѾþ| ۺ߳һ| պӰ߹ۿվ| | պþۺĻ| wŷs| AV| igaoƵ| Ʒһ| ۺɫ| 99Ʒѹۿ| ɫվwwwһ| ҳƵ߲| ƵƬaaëƬ| һëƬ߲| 99ƵѲ| ޲avһ| ɫƵѿ| avһ| ҹӰ| ѿˬֻƽƬƵ1000| ޹Ƶ| 1000žžʮδֹۿ | պŷһѹۿ | һ߲ | ޾Ʒtvþþþ| ۺϾƷһ| ߹ۿΪƵ|