??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲美日韩AV中文字幕无码成人,亚洲AV综合色区无码二区偷拍,精品亚洲综合久久中文字幕http://www.tkk7.com/51AOP/category/10363.htmlxSoA发展zh-cnTue, 27 Feb 2007 12:31:10 GMTTue, 27 Feb 2007 12:31:10 GMT60Frails 介绍.http://www.tkk7.com/51AOP/archive/2006/11/17/81778.html冰雨冰雨Fri, 17 Nov 2006 08:14:00 GMThttp://www.tkk7.com/51AOP/archive/2006/11/17/81778.htmlhttp://www.tkk7.com/51AOP/comments/81778.htmlhttp://www.tkk7.com/51AOP/archive/2006/11/17/81778.html#Feedback1http://www.tkk7.com/51AOP/comments/commentRss/81778.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/81778.html
但是有些时候JSF的用还是不是十分方? 其是对于初学者而言, 常常被一些莫明其妙的问题搞得晕头转向.
怿很多初学者都见到q这个Exception?

严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot find FacesContext

当我在学习JSF的时?看到q个Exception我找了半天都没有发现我的代码哪里错了(代码不可能出?因ؓ是直接copy的书中的源代?呵呵), 后来不经意间才发现原来访问页面的URL错了, 在JSF配置文g中配|的servlet映射?jsf,所以访问的URL应该?.... index.jsf, 而不?... index.jsp., p么一点疏忽就让h白忙zM半天. 郁闷?

随着学习的深?q种基本错误是很再出现?q出现也可以马上知道问题的Ҏ), 但是JSF其他的一些限制又是让人感到很郁闷? 比如 Form数据的提? JSF规范中ؓ了维护服务端的组件树 只能使用Post提交, 而不可以使用Get. 而GetҎ在很多地方还是非常有用的.

另外q有Faces API使用h不是十分直接的问? 要把一个数据放入到session中就要一大串的操? FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(name, val); ),让h感觉很不?

....

如果你经帔R到这些问? 那么现在我将告诉你一个好消息, 有了Frails q些问题都可以轻而易丄解决?

我们先来看看Frails是什?

在Frails主页上定?http://frails.hexiao.cn/what-is-frails.html

what is frails?

Frails 是基于JSF上的一个开发效率和RoR可以向媲的JavaEE框架 !

Ruby On Rails(RoR)因ؓ在开发webE序的高效性而风行一?可能现在仍然很热), 那些RoR的支持者说, RoR可以比java的开发效率高?0倍以?我们Ҏ观点持怀疑的态度. 我们怿,如果有正的开发方法来支持现在的Java web framework,?Java web开发的效率 不会如此的低?所?我们研究了一下RoR的实现机?来实现我们Java框架中的RoR. 因此, 我们提供一个在开发效率上和RoR可以媲美的JavaEE开发框?-- Frails !

知道了Frails是什么后, 我们再来看看Frails有什么特? 能给JSF带来什么功能上的增?


在Frails主页上列举了Frails的如下主要特? http://frails.hexiao.cn/frails-features.html

Frails(Java Server Faces On Rails)ZJava Server Faces (JSF),q将提供?Hibernate和Spring的支? 主要特征如下:

Frails 让开发者用约?习惯)和注?annotations)来省略在 faces-config.xml 文g?managed-bean ?navigation-rule的配|?
Frails 提供一个更单的Ҏ来?Faces API.
Frails 重定向非 faces hZ?faces h,q样可以避免因ؓURL输入的疏忽导致的异常.
Frails 提供一些预定义?Managed Bean 基类让开发者扩?.
Frails 可以让开发者在 Managed Bean 中用注?Annotation)来支持AOP功能 ,?函数拦截(method interception).
Frails 提供 Managed Bean 属性的injection ?outjection
Frails 中的Hibernate GenericDao 对象提供了基本的 CRUD 函数 ?其他一些有?常用)的数据访问函?
Frails q提供了一些有用的注解(annotations)来简化JSF的开?
Frails 完全支持 jsf 1.1 ?jsf 1.2 规范,q且可以自动的探你使用的版?
Frails 提供了对action Method ?Listener 函数的增?在这些函C现在你可以传递参C.


知道q这么多Frails的东? 那么你不要?如何使用Frails?

q个是很单的.   你只需要在web.xml文g中添加下面的配置:

<filter>
<filter-name>FacesFilter</filter-name>
<filter-class>net.sf.frails.filters.FacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FacesFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


然后把你下蝲的frails4jsf1.X.jar 攑ֈc\径中可以用了.

现在可以使用? 你不要? 如果在用过E中我遇C问题, 要到哪里得到帮助?如果我有好的Frails改进要到哪里提议?
关于frails的服务问? 你可以到JavaCafe http://www.hexiao.cn/jsf/ 论坛的Frails专区中取得帮?

ok, q次Frails 介就先到q里, 希望Frails能在你开发Java web app时给你带来一丝清?


资源:

Frails英文主页 http://frails.sf.net
Frails中文主页 http://frails.hexiao.cn
Frails中文论坛 http://www.hexiao.cn/jsf



冰雨 2006-11-17 16:14 发表评论
]]>
关于maven2eclipse plugin的错误解军_?/title><link>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Thu, 19 Oct 2006 05:12:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/76142.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/76142.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/76142.html</trackback:ping><description><![CDATA[在直接安?在线or手动) m2plugin 0.0.6以上时? 打开Maven2的?b class="highlight">Preferences</b> page <b class="highlight">׃出现下面的错?br /></b><span><br />"<b class="highlight">Unable</b><b class="highlight">to</b> create the selected preference page </span><br /><span>Reason: </span><br /><span><b class="highlight">Plug</b>-<b class="highlight">in</b><b class="highlight">org</b>.<b class="highlight"><a title="Apache Maven tools " target="_blank">Maven</a></b>.<b class="highlight">ide</b>.<b class="highlight">eclipse</b><b class="highlight">was</b><b class="highlight">unable</b><b class="highlight">to</b><b class="highlight">load</b><b class="highlight">class</b></span><br /><span><b class="highlight">org</b>.<b class="highlight">maven</b>.<b class="highlight">ide</b>.<b class="highlight">eclipse</b>.<b class="highlight">preferences</b>.<b class="highlight">Maven2PreferencePage</b>" <br /></span><br /><br /><br />l过多方查找资料发现, 先安?.0.5 然后升񔞮可以解册问题?<br /><br />不知道ؓ什么要q么ȝ, <br /><br /><br /><img src ="http://www.tkk7.com/51AOP/aggbug/76142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-10-19 13:12 <a href="http://www.tkk7.com/51AOP/archive/2006/10/19/76142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX支持的自动填充表?/title><link>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Tue, 26 Sep 2006 01:41:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/71893.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/71893.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/71893.html</trackback:ping><description><![CDATA[<p>前几?在这?a >https://bpcatalog.dev.java.net/nonav/ajax/textfield-jsf/design.html</a> 看到了一个实现AJAX支持的自动填充表? 使用q种方式可以改善用户体验, 举个例子: 在填写用户信息的时?要填写用Lc诏, 在全国有q么省市和地?要是仅仅提供一个下拉菜单来选择, 在这么多选项中选择是否很郁闷呢, 如果也可以让用户输入一部分文字 然后弹出相关的选项q样不是更好?用户使用更方? </p> <p>上面的文章介l的比较详细, 也是jsf的一个ajax扩展目, 其实对于使用myfaces的用h说还有个更的选择:使用<strong>MyFaces Sandbox 中的 InputSuggestAjax</strong>   </p> <p> <a >http://myfaces.apache.org/sandbox/inputSuggestAjax.html</a> </p> <p>用法如下:</p> <p>1.创徏一个managed bean: </p> <p>package test;</p> <p>import java.util.ArrayList;</p> <p>import java.util.List;</p> <p>public class Bean {     </p> <p>            //In that function all what you had to do is to</p> <p>            //Specify what will be displayed in the list</p> <p>            //Note that the keyword is the text entered by the user</p> <p>            public List getSuggestedWords(String keyword) {</p> <p>                        List list = new ArrayList();</p> <p>                        list.add(keyword + " Ahmed Saleh");</p> <p>                        list.add(keyword + " Kahki");</p> <p>                        list.add(keyword + " Kourany");</p> <p>                        list.add(keyword + " Kiki");</p> <p>                        list.add(keyword + " Saleh Abouetta");</p> <p>                        list.add(keyword + " Hashim");</p> <p>                        return list;</p> <p>            }</p> <p>            public String getCurrentValue() {</p> <p>                        return currentValue;</p> <p>            }<br />            public void setCurrentValue(String currentValue) {</p> <p>                        this.currentValue = currentValue;</p> <p>            }<br />            String currentValue;</p> <p>}</p> <p>2.     jsp 面代码</p> <p><%@ taglib uri="<a prefix="h" %></p> <p><%@ taglib uri="<a prefix="f" %></p> <p><%@ taglib uri="<a prefix="s" %></p> <p><html></p> <p><head></p> <p><title>Ajax JSF sample (InputSuggestAjax)</title></p> <p></head></p> <p><body></p> <p><f:view></p> <p> <h:form></p> <p>  <h:outputText value="Enter your name : "/></p> <p>   <s:inputSuggestAjax suggestedItemsMethod="#{bean.getSuggestedWords}" </p> <p>    value="#{bean.currentValue}" /></p> <p>   <br /></p> <p>   <h:commandButton action="" value="Submit"/></p> <p>   <br /></p> <p>   <h:outputText value="Your name is #{bean.currentValue}"/></p> <p> </h:form></p> <p></f:view></p> <p></body>     </p> <p></html>  </p> <p> 3.  web.xml配置</p> <p><context-param></p> <p>  <param-name>javax.faces.STATE_SAVING_METHOD</param-name></p> <p>  <param-value>client</param-value></p> <p></context-param></p> <p>//Instead of server make the state saving method on the client to make it works</p> <p> 4. 输出面:</p> <div align="left" forimg="1"> <a target="_blank"> <img class="blogimg" src="http://hiphotos.baidu.com/jsfcn/abpic/item/9325da43a19e551372f05de1.jpg" border="0" small="1" /> </a> </div> <p>版本为? 1.1.4 CZ代码提供<a target="_blank">Hazem</a> <a >http://bbs.hexiao.cn/</a> </p><img src ="http://www.tkk7.com/51AOP/aggbug/71893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-09-26 09:41 <a href="http://www.tkk7.com/51AOP/archive/2006/09/26/71893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 问题: Cannot serialize session attribute XXX for ..的解军_?/title><link>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Mon, 25 Sep 2006 02:15:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/71662.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/71662.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/71662.html</trackback:ping><description><![CDATA[<p>在关闭和重启Tomcat 5? tomcat 会试?serialize存在的session资源. 如果 sessions中相关的对象没有实现 serializable 接口, ׃出现Cannot serialize session attribute XXX  for  异常.</p> <p>如果你不想看到该异常, 也不想保存session. 那么你可以在目部v描述文g?? test.xml,)(instead of just exploding the war)  ? <Context> tags中间 加上 :<br /><Manager className="org.apache.catalina.session.PersistentManager" <br />saveOnRestart="false"/><br />q样 tomcat 在关闭的时候就不会保存session资源?</p> <p> <br />你也可以在server.xml中指定上面的? q也所有的E序都用这个设|了.</p> <p> </p> <p>试试? </p><img src ="http://www.tkk7.com/51AOP/aggbug/71662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-09-25 10:15 <a href="http://www.tkk7.com/51AOP/archive/2006/09/25/71662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用G4JSF集成 Google Web Toolkit ?JSF(3)http://www.tkk7.com/51AOP/archive/2006/09/07/68165.html冰雨冰雨Thu, 07 Sep 2006 00:32:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/07/68165.htmlhttp://www.tkk7.com/51AOP/comments/68165.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/07/68165.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/68165.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68165.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess 讨论

AJAX, AJAX, AJAX

如果你听说过 GWT,那么你一定也听说q它的一个核心特性就?AJAX 支持.?GWT? the "X" part,在客L和服务器端来回传递数? 该功能是通过RPC (Remote Procedure Call) 机制实现的而不是?XMLHttpRequest object.

不管q些,你想在服务器端做什么是有你军_? GoogleU它?Server Agnostic".

让我们看看如何添?AJAX 方式的异步通信到我们的E序?

Asynchronous Communication in Hosted Mode

在下个阶D中,我们改变该E序的环?我们d一个用户可以输入姓名的文本?一旦按钮被点击?h会发送到服务器端.服务器将q回出现在弹出窗口的消息.Z跟踪h和响?我们d一个文本标{来昄h的状?

Z在服务器和客L传送数?我们使用两个Java beans.  – 一个把数据带回服务器端,一个把响应带回客户? .

Client-Side Coding

28. 在JavaSource中创Z?demo.gwt.client.EventData c?内容如下:

package demo.gwt.client;

import org.ajax4jsf.gwt.client.GwtFacesEvent;

public class EventData extends GwtFacesEvent {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

用来在客L到服务器端传送数据的c?发送事?应该l承 G4jsf的 GwtFacesEventc?

29. 创徏另外一个类 demo.gwt.client.ResultGreeting.

内容如下:

package demo.gwt.client;

import org.ajax4jsf.gwt.client.GwtFacesResult;

public class ResultGreeting extends GwtFacesResult {
String greetingText;

public String getGreetingText() {
return this.greetingText;
}

public void setGreetingText(String greetingText) {
this.greetingText = greetingText;
}
}
 

从服务器端带来响应的cd该承G4jsf?GwtFacesResult c?

 GwtFacesEvent 和GwtFacesResult 都实C  com.google.gwt.user.client.rpc.IsSerializable 接口,用来序列化在客户端和服务器端传递的被GWT使用的数?

让我们更新我们的widget c?

30. 打开demo.gwt.client.HelloWidgetEntryPoint 使用下面代码替换?

package demo.gwt.client;

import java.util.Map;

import org.ajax4jsf.gwt.client.ComponentEntryPoint;
import org.ajax4jsf.gwt.client.GwtFacesServiceAsync;

import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class HelloWidgetEntryPoint extends ComponentEntryPoint {
Label status;
TextBox input;
protected Widget createWidget(final String id) {

Map m = getWidgetParams(id);
final String buttonLabel = (String) m.get("buttonLabel");


HorizontalPanel panel = new HorizontalPanel();


input = new TextBox();
status = new Label("Loaded.");

final GwtFacesServiceAsync service = createFacesService(id);

final AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Object result) {
if (null != result) {
status.setText("Loaded");
String greeting =  ((ResultGreeting)result).getGreetingText();
Window.alert(greeting);
} else {
status.setText("Request finished, but the result is empty");
}
}

public void onFailure(Throwable caught) {
status.setText("Error call :" + caught.getMessage());
}
};
Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
EventData eventData = new EventData();
eventData.setName(input.getText());
service.sendEvent(eventData, callback);
status.setText("Loading...");     
      }
});


panel.add(input);
panel.add(btn);
panel.add(status);
return panel;
}
}

q里?个重要的部分.1.lg的布局.我们创徏了一个水q面?然后d了一个input box,button,和text label.

2.声明了异步服务和事g,它承至异步模型的AJAXh.

...
final GwtFacesServiceAsync service = createFacesService(id);
...
Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
EventData eventData = new EventData();
eventData.setName(input.getText());
service.sendEvent(eventData, callback);
status.setText("Loading...");     
      }
});
...
:

 

我们dClickListener 到button? ?On Click 事g发生?我们创徏q且使用输入的数据填? EventData bean 然后使用异步服务发送该事g.在代码的l后一?我们讄text label的文本ؓ "Loading?,因此? AJAX request 开始的时?用户可以看到变化 .

3.发送事?我们注册了一个回调函? 

.........
.........
final AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Object result) {
if (null != result) {
status.setText("Loaded");
String greeting =  ((ResultGreeting)result).getGreetingText();
Window.alert(greeting);
} else {
status.setText("Request finished, but the result is empty");
}
}

public void onFailure(Throwable caught) {
status.setText("Error call :" + caught.getMessage());
}
};
...........
...........

Callback ?Google toolkit中AsyncCallback  cȝ一个接?我们实现了两个方?onSucess and onFailure. 在onSuccess情况? 我们d了一个附加的到来的l果.如果我们没有受到一个期望的c?我们标记在状态文本中. 

现在我们完成了客L的代?如果你? Hosted Mode (with the "ant shell" command)来启动程? 你将看到 "Request finished, but the result is empty", 因ؓ我们q没有写服务器端代码.

Server-Side Coding

在Hosted Mode中的服务器端代码, 在server包中的一个类扮演了一个重要角?

31. 打开JavaSource中的demo.gwt.server.MockHelloWidget java 文g.

 sendEvent 函数复杂发送响应到客户?

32. 把sendEvent函数替换Z面的内容.:

public GwtFacesResult sendEvent(GwtFacesEvent event){

        ResultGreeting result = new ResultGreeting();
        result.setGreetingText( "Hello " +
((EventData)event).getName() );
               return result;
}
 

33. 导入需要的c?

import demo.gwt.client.ResultGreeting;
import demo.gwt.client.EventData;

The parameter of the method points to the event content that came from the client. What we do here is create the Result bean filling it with a greeting message and then returning.

34.在Hosted Mode中启动ant:

Adding JSF Listeners for Run-Time Mode

处理JSF的事件和Hosted Mode的代码差不多. 客户端代码不?在服务器?, G4jsf使用 JSF 监听器机制来处理 Ajax events.

35. 打开 WebContent/pages/Base.xhtmlq添加监听器lg声明.

<widget:component id="main" buttonLabel="#{bundle.buttonLabel}"
greeting="Hello #{greetingBean.name}!" >
   <gwt:gwtListener method="#{greetingBean.takeGreeting}"
   event ="demo.gwt.client.EventData"/>
</widget:component>
 

  gwtListener 元素有两个属? "method"使用JSFEL指向处理?"event"用来定义事gcd. 事gcd是类的全限定?.最后一步是实现该函?

36. 打开demo.gwt.app.GreetingBeand下面的代?

public ResultGreeting takeGreeting(EventData event) {
name = event.getName();
ResultGreeting result = new ResultGreeting();
result.setGreetingText("Hello " + name + " from JSF!");
return result;
}
 

37. 和需要导入的c?

import demo.gwt.client.ResultGreeting;
import demo.gwt.client.EventData;

该函数的{֐(signature  )很容易记?该函C用来自于客户端的事g作ؓ他的唯一一个参?q回gؓ 用来q回l果的事件类?type of the method equals is just the type of the class used to return the result).在这个函C,我们合成响应数据q且q回?

38. 创徏war文g,部v?

如果你启动服务器,可以看导:

The Last Word

如你看到的,通过G4JSF使用两种互补的技?GWT and JSF)可以做很多漂亮的事情. 但是,仍然q有很多东西可以q一步添加到G4jsf?作ؓ一个开源项? , G4jsf依靠一个开源社区来支持和开发它.如果你只是用它,那是很好?但是你也可以加入到G4JSFC֌中来, 帮助G4JSF让他做的更好.  Come visit us at:

https://ajax4jsf.dev.java.net

About the Author

Sergey Smirnov is Senior Product Manager at Exadel where he oversees the development of major products including Exadel Visual Components Platform and Exadel Studio. He has more than 15 years of in-depth development experience, primarily in the area of Web applications. His experience with JSF goes back to the very early days. For two years, he has served as a member of the JSF expert group. In addition to this, he manages a site for JSF-related resources, www.jsftutorials.net. Finally, Sergey is the co-lead of the open source project Ajax4jsf (https://ajax4jsf.dev.java.net). He can be reached at ssmirnov@exadel.com.



冰雨 2006-09-07 08:32 发表评论
]]>
使用G4JSF集成 Google Web Toolkit ?JSF(2)http://www.tkk7.com/51AOP/archive/2006/09/07/68163.html冰雨冰雨Thu, 07 Sep 2006 00:31:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/07/68163.htmlhttp://www.tkk7.com/51AOP/comments/68163.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/07/68163.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/68163.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68163.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess 讨论

 

使用更多的动态文?/h2>

在我们应用程序的W一个版本中,我们编码标{֭W到E序?在下一个版本中,我们保持该文本与java代码分离.

GWT Parameters in Hosted Mode

一U方式是使用GWT来定义label 和message.

13. 打开demo.gwt.client.HelloWidgetEntryPoint.java 文g用下面的代码替换createWidget Ҏ.

protected Widget createWidget(final String id) {
Map m = getWidgetParams(id);
final String buttonLabel = (String) m.get("buttonLabel");
final String greeting = (String) m.get("greeting");

Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
      Window.alert(greeting);
      }
});

return btn;
}
 

14. 保存文g.

15. 打开 JavaSource\demo\gwt\public\index.html 文g.

该文件已l包含了一个如何定义参数的CZ,我们只需要修改一下就可以? :

16. 修改为如下的代码:

<html>
<head>
<meta name="gwt:module" content="demo.gwt.HelloWidget">
<meta name="gwt:property" content="viewid=hello">
<meta name="gwt:property" content="action=/gwtFacesServlet">
<title>gwt-jsf integration</title>
</head>
<body bgcolor="white">
<script language="javascript" src="gwt.js"></script>
<iframe id="__gwt_historyFrame"
style="width:0;height:0;border:0"></iframe>

<span id="_id1" class="demo.gwt.HelloWidget">
<span id="_id1:_data" style="display:none;">
<span  title="buttonLabel">Say Hello</span>
<span  title="greeting">Hello GWT!</span>
</span>
<input type="hidden" id="javax.faces.ViewState"
name="javax.faces.ViewState" value="_id0:_id0" />
</span>

</body>
</html>

17. ?Hosted Mode 中启动ant:

然?如果你想创徏一个war文g,然后部v?你将看不到相同的l果.q是因ؓ public/index.html仅仅在Hosted Mode中其作用.?Run-Time Mode,我们需要?JSF page.

Using JSF Expression Language (EL) in Run-Time Mode

看一下WebContent\pages\Base.xhtml文g.它包含如下代? 

<widget:component id="main"  />

q实际上是一个GWT widget 的 JSF 包装.

18. 定义lg?buttonLabel" ?greeting" 参数 :

<widget:component id="main"  buttonLabel ="Click Me!"
greeting="Hello, GWT and JSF"/>

19. 在Run-Time Mode中运行该目.

看看l果. 然而这是不是太单了, 下面来看看如何? JSF EL来它更动态一?

20.现在关闭XHTML 文g.

 

Adding a Resource File

21. 在JavaSource  文g夹下创徏demo/gwt/app/bundle/Labels.properties文g,包含下面的内?

#
buttonLabel=Say Hello!
 

Adding a Managed Bean

22. 在JavaSource中创Z个类demo.gwt.app.GreetingBean  .使用下面的代?

package demo.gwt.app;

public class GreetingBean {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

23. 在WEB-INF/faces-context.xml 中注册该bean.

The faces-context.xml should contain

:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.
//DTD JavaServer Faces Config 1.1//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>

<managed-bean>
  <managed-bean-name>greetingBean</managed-bean-name>
  <managed-bean-class>demo.gwt.app.GreetingBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
  <managed-property>
   <property-name>name</property-name>
   <property-class>java.lang.String</property-class>
   <value>GWT and JSF</value>
  </managed-property>
</managed-bean>


  <application>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
 

Finishing Up

要让EL工作.我们要在lgcMd属性到属性map?

24. 打开demo.gwt.jsf.UIHelloWidget, 扑ֈ getWidgetParameters() Ҏ,使用下面的代码替?

public Map getWidgetParameters() {
HashMap params = new HashMap();
params.put("greeting",getAttributes().get("greeting"));
params.put("buttonLabel",getAttributes().get("buttonLabel"));
return params;
}

25. d下面的import语句:

import java.util.HashMap;

现在回到 pages/Base.xhtml文g?

26. 把资源声明放到该文g的顶?

<f:loadBundle basename="demo.gwt.app.bundle.Labels" var="bundle"/>

27. 修改widget:component的属?  

<widget:component id="main" buttonLabel ="#{bundle.buttonLabel}"
greeting="Hello #{greetingBean.name}!" />

   

 

现在两个属性都通过el来生了,一个来自于 bundle resource file, 一个来自于 backing bean.

如果你创?部v,启动该程?你可以看到该E序现在使用的按钮标{了:

OK,我们已经在JSF环境中参数化了GWT widget的数? 因此你可以用同LҎ用数据初始化? widget  .然而目前这一切看h想一张单ER? one-way ticket).我们q没有提C个非帔R要的斚w .



冰雨 2006-09-07 08:31 发表评论
]]>
使用G4JSF集成 Google Web Toolkit ?JSF(1)http://www.tkk7.com/51AOP/archive/2006/09/06/68081.html冰雨冰雨Wed, 06 Sep 2006 09:51:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/06/68081.htmlhttp://www.tkk7.com/51AOP/comments/68081.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/06/68081.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/68081.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/68081.html原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

译:icess http://blog.matrix.org.cn/page/icess  讨论

Google Web Toolkit (GWT) 吸引了一些开发者的注意.因ؓ使用它你可以很容易的dAJAX Web 2.0功能C的程序中. GWT的设计师努力隔绝用户和JavaScript打交?你只要用GWT可以了,不需要知道如何用JS. GWT 通过从java代码来生JS代码的\方式 实现了创建高U客LJS组?client-side JavaScript widgets)的Q?

与此同时, JavaServer Faces (JSF)聚集了愈来愈多的成ؓ通用服务端web框架的要?JSF成功的主要原因是:自顶向下的基于组件的方式来开发webE序. 同时JSF带有自己标准的随时可?out-of-the-box)的UIlg , 它被设计为简单的包含其他lg?it is designed for the easy inclusion of other component libraries).

然?q两Ҏ术是不可思议的他们自己L,他们两个怺l合的非常好(怺互补). GWT 不知道服务端的状? server-side-agnostic),然?JSF'sZlg的结构可以很Ҏ的适应Mlg的渲?在这文章中,我们讨?(首先通过一个step-by-step 的例?一个促q这两个技术互补的新框?

  G4jsf 已经成ؓAjax4jsf开源项目的一个子目?(https://ajax4sf.dev.java.net) ,有它来生这U集成库.

GWT和JSF之间看v来是怺竞争的技?而用G4JSF则看h是很自然的互补技?而G4JSF的Q务就是ɘq种互补关系的技术看h更自然一?

关于G4jsf

库文件包含两个部?

  •   G4jsflg开发包( Component Developer Kit)包含 目骨架产生?
  • 一个?strong>run-time library 提供在GWT widgets和JSF环境之间的过渡作?

G4jsf 注意了JSF ?GWT 两种技术的发展q程\.对于 GWT,  widgets仍然在主机模型中开?q且在?Google browser来调?  GWT 目l构包含 /client, /public, ?/server ? q且q在l箋l护.

 G4jsf lg开发包(G4jsf CDK)产生的组件包含两个部?一?包含客户端行为的GWT widget .二是负责 GWT widget ?JSF 环境之间的通信问题.

G4jsf CDK 使用Facelets方式来写JSFlg. 它比不同的JSP方式要简? 使用普通的方式要创Z个TLD文g和一个Tagc?使用Facelets的方式是相当直接?

CZE序 

在这文章中,我们一步一步的通过一个简单的"Hello, World" 例子来讲qG4JSF的主要功?我们也创Z个实际的例子,a4j-gwtdemo. 在这?http://livedemo.exadel.com/a4j-gwtdemo/ 可以看到该例?

你可以从Ajax4jsfCZ面上下载到CZ的源代码和war部v文g .?/font>http://code.google.com/webtoolkit/download.html.

2. 保存GWT SDK  .

3. 把G4JSF CDK中的  build.properties.sample 重命名ؓ build.properties,打开?把gwt.home改ؓ你的本地GWT ȝ?

例如,你把 Google Web Toolkit SDK 解压?
gwt.home=D:/gwt-windows-1.1.0

4. ~辑,保存文g

初始化工作已l做好了,下面来生项目框?

产生一个项目框架?/h2>

在刚才的目录下的build文g中有?"create-component" target. 它需要俩个运行参?

out

产生的项目代码文件存攄目录.路径的最后一部分为项目的名字

m odule

 GWT module的全限定? 产生的JSF lgcd有同样的名?

让我们命名模型ؓ demo.gwt.HelloWidget 保存目的名字ؓ, KickStart, 在D:/workspace/ 文g夹下. (Of course, you can change any of these.)

5.使用下面的命令运行ant:

让我们来ȀzL们的目.我们在标准的GWT Hosted Mode中来看看效果,在下个部分中在servlet container?来允许该例子.

7.打开 JavaSource/demo/gwt/client/HelloWidgetEntryPoint.java文g.

它包含一个 HelloWidgetEntryPoint c? 里面有个q回null的方?

8. 使用下面的代码替换该Ҏ:

public class HelloWidgetEntryPoint extends ComponentEntryPoint {

 protected Widget createWidget(final String id) {
  
   Button btn = new Button("Click me", new ClickListener() {
        public void onClick(Widget sender) {
         Window.alert("Hello, World");
        }
  });
  
  return btn;
 }
} 

9. 保存文g,到ant文g夹下?

Hosted Mode

10. 使用shell目标启动ant:

  Google Toolkit Development shell ?Google browser 启动?在browser中显CZ我们刚才创徏的button.如果你点击button ,一个带问候消息的警告框出C.

 Google browser包含一? "Compile/Browser" 按钮.如果你点d,你可以在你默认的览器中查看该示?  

目前q没有Q何JSF代码搀合进?到此Z我们只是在?"Hosted Mode."你可以在该模式下开发和调试你的 GWT widget . 如果你已l有了开发 GWT的经验了,那么你应该很熟悉它了. G4jsf QDQ 的处理过E和q里是一L.

Run-Time Mode

下一步是在JSF 环境中运行该CZ.

11.使用 "war" target启动ant:

q行该项?可以看到同L效果,但是q行在JSF环境中我们称它ؓ  "Run-Time Mode."我们已经? GWT widget 包装为JSF lg?q才是集成的W一?

 

				讨论
		


冰雨 2006-09-06 17:51 发表评论
]]>替换c\径中的jar文g(在eclipse中升Ujar文g -- eclipse使用技?http://www.tkk7.com/51AOP/archive/2006/09/05/67802.html冰雨冰雨Tue, 05 Sep 2006 06:38:00 GMThttp://www.tkk7.com/51AOP/archive/2006/09/05/67802.htmlhttp://www.tkk7.com/51AOP/comments/67802.htmlhttp://www.tkk7.com/51AOP/archive/2006/09/05/67802.html#Feedback1http://www.tkk7.com/51AOP/comments/commentRss/67802.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/67802.htmlReplacing JARs on the Build Path  -- Eclipse 技?/p>

from:R.J. Lorimer 

在维护项目的一个普通的d是升库文?例如, 你在使用 commons-collections 在你的项目中,现在使用的是3.1,但是现在 3.2 发布? 你想使用? 所以你需要用新的jar来替换旧的jar库文?在eclipse3.2发布以前你需要做下面的几步来完成?:

  1. Copy 新的jar文gC的项目lib目录?
  2. 通过 操作[right-click project]->Properties...->Java Build Path->Libraries (tab)来删除类路径中的旧jar文g
  3. d新的jar文gC面的路径中?
  4. 如果需要的话还要 重新命名类文g or 更新文g引用

q样做是很郁L. 其是你使用一个用很多第三方jar文g的工h(?Hibernate,spring) 当你升q些目?你要做很多上面的改动. 是不是很无趣??

来看看Eclipse 3.2 l我们带来了什么吧.有一个新的特性叫 'Migrate JAR File',用来升jar文g.要用该功能,在要替换的jar文g上右?q入 Build Path 子菜单选择 'Migrate JAR file':

你会看到下面的对话框:

如果你不走运也要Ҏjar文g名的?保持原来的名字不?你可以选中那个复选框..

然后点击finish, 你将看到你的jar文g已经升?

情享受? http://bbs.hexiao.cn/ 



冰雨 2006-09-05 14:38 发表评论
]]>
JSFlg : Rss4JSF - show Rss content in JSF pageshttp://www.tkk7.com/51AOP/archive/2006/08/25/65861.html冰雨冰雨Fri, 25 Aug 2006 13:25:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/25/65861.htmlhttp://www.tkk7.com/51AOP/comments/65861.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/25/65861.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/65861.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/65861.html阅读全文

冰雨 2006-08-25 21:25 发表评论
]]>
关于apache poi 抽取word文本的问?http://www.tkk7.com/51AOP/archive/2006/08/25/65840.html冰雨冰雨Fri, 25 Aug 2006 10:05:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/25/65840.htmlhttp://www.tkk7.com/51AOP/comments/65840.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/25/65840.html#Feedback4http://www.tkk7.com/51AOP/comments/commentRss/65840.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/65840.html
   WordDocument wd = new WordDocument(is);
  StringWriter docTextWriter = new StringWriter();
  wd.writeAllText(new PrintWriter(docTextWriter));
  docTextWriter.close();
  bodyText = docTextWriter.toString();  
    // bodyText = new WordExtractor().extractText(is);
  System.out.println(bodyText);



抽取不出所有的文g, 好像有字数限? 只能抽取前面部分字符. 是不是bug?



使用qpoi? 有没有遇到这U问题啊, 有没有好的办法呢, 路过的给点徏? 谢谢


冰雨 2006-08-25 18:05 发表评论
]]>
Ajax4JSF子项?G4jsf 发布http://www.tkk7.com/51AOP/archive/2006/08/20/64599.html冰雨冰雨Sun, 20 Aug 2006 04:10:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/20/64599.htmlhttp://www.tkk7.com/51AOP/comments/64599.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/20/64599.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/64599.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/64599.htmlG4jsf is new open source subproject under Ajax4jsf. The subproject's purpose is to maintain an integration library for the Google Widget Toolkit (GWT) and JavaServer Faces (JSF) that wraps Google widgets into JSF components to fully leverage both technologies. G4jsf CDK is a component development kit for making these components.

下蝲: https://ajax4jsf.dev.java.net/downloads/gwt/g4jsf-cdk-binary.zip

This zip file contains the latest version of G4jsf CDK.
Download and unzip it to your local disk.
It requires the Google Web Toolkit SDK. Google does not allow the distribution of the Google Web Toolkit SDK, so, if you don't have it, you need to download it directly from: http://code.google.com/webtoolkit/download.html and unzip it to your local disk.
Rename the build.properties.sample file from the g4jsf-cdk-binary.zip archive to be called build.properties and open it for editing.
In this file, set gwt.home to the location of the GWT SDK. For example, if you have your copy of Google Web Toolkit SDK installed into D:/gwt-windows-1.1.0 , then you would set gwt.home this way:
gwt.home=D:/gwt-windows-1.1.0Save build.properties

? Ajax4JSF User Guide中文完全?br />
http://bbs.hexiao.cn/read.php?fid=3&tid=17&fpage=1



冰雨 2006-08-20 12:10 发表评论
]]>
使用netbeans来监控Http 通讯http://www.tkk7.com/51AOP/archive/2006/08/15/63598.html冰雨冰雨Tue, 15 Aug 2006 01:29:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/15/63598.htmlhttp://www.tkk7.com/51AOP/comments/63598.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/15/63598.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/63598.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/63598.html ?/font>Roumen的blog?l我们提供了一个用netbeans的小技? 用来监控http通信,

刚好最q几天做的一个东西要知道通信的细? 用的都是httpwatch, 没有和ide集成h,感觉不是很爽. 现在试试q个功能? 呵呵

Did you know that you can use NetBeans to monitor all communication of your web application - between the web browser and the web server? Indeed, you can see all the requests, read the headers, see the request parameters, etc. But not only that, you can actually save these requests and replay them.

This becomes very handy when testing your web application. For example you want to open a page with different parameters so you replay the request with modified (or even new) parameters.


HTTP Monitor in NetBeans


HTTP monitor becomes really handy when working with AJAX. You can see every individual request and response, even though the form wasn't submitted - so you can actually monitor how javascript code requests new XML documents as the user goes through the page. It is quite amazing how much communication there can be between the webpage and server in some AJAX apps. So HTTP monitor can also help you see if you are not doing too many requests to the server.

HTTP monitor is accessible via Window | HTTP monitor. In case of Tomcat the monitor is enabled by default, but in case of Sun appserver it needs to be activated in Server Manager. I do not know about the other servers... please add a comment if you know how you can monitor requests to other appservers.



冰雨 2006-08-15 09:29 发表评论
]]>
Ajax4jsf User Guide 中文译 -- 在JSF中用AJAXhttp://www.tkk7.com/51AOP/archive/2006/08/11/63094.html冰雨冰雨Fri, 11 Aug 2006 13:31:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/11/63094.htmlhttp://www.tkk7.com/51AOP/comments/63094.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/11/63094.html#Feedback1http://www.tkk7.com/51AOP/comments/commentRss/63094.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/63094.htmlAjax4jsf User Guide 中文译
译专脓: http://bbs.hexiao.cn/read.php?fid=3&tid=13&fpage=1

序言

Ajax4JSF是一个很Ҏ使用的框? 在其User Guide中详l介l了如何使用其功?找时间学习一?q翻译出?以加q解和方便更多的Java爱好者用Ajax4jsf 框架.

译q度和问题可以在论坛讨论. http://bbs.hexiao.cn/



W二章是一个简单的入门E序,看完q一章你可以徏立基本的AjaxE序?
Chapter 2. Getting Started with Ajax4jsf


环境要求
要用Ajax4JSF 框架你仅仅需要JDK1.4或者更?MJSF实现,和你最喜欢的Servlet容器.在下一章我们将l你提供详细的环境信?
Ajax4jsf 被设计ؓ一个容易用的框架.仅仅有一点简单的讄步骤可以在你的JSFE序中用Ajax功能?


下蝲 Ajax4jsf
最新的Ajax4jsf 发布版在q里

https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/download.html

下蝲.
安装
解压 ajax4jsf.zip 文g.
复制 ajax4jsf.jar and oscache-2.2.jar 到程序的 WEB-INF/lib 文g夹下.
把下面的内容dC的程序的 WEB-INF/web.xml 文g?
  •  <filter>
              <display-name>Ajax4jsf Filter</display-name>
              <filter-name>ajax4jsf</filter-name>
              <filter-class>org.ajax4jsf.Filter</filter-class>
              </filter>
              <filter-mapping>
              <filter-name>ajax4jsf</filter-name>
              <servlet-name>Faces Servlet</servlet-name>
              <dispatcher>REQUEST</dispatcher>
              <dispatcher>FORWARD</dispatcher>
              <dispatcher>INCLUDE</dispatcher>
              </filter-mapping>
            

    注意. 你可以复制和_脓上面的内容在 README.txt 文g?

  • d下面的内?

      <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
            

    C每个使用Ajax功能的JSP面?

单的 AJAX Echo 目

让我们来看一个简单的JSF目. 我们仅仅需要一个JSP面,里面包含一个Form和一些JSF标签: <h:inputText> ?<h:outputText>.

我们q个单的E序应该可以让我们输入一些文字到<h:inputText>? 然后发送数据到Server,q在 <h:outputText>中显CServer的响?l我们一个Echo信息).

JSP 面

下面是一个我们需要的面代码 (echo.jsp) :

    <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <html>
      <head>
        <title>repeater </title> 
      </head>
      <body>
        <f:view>
          <h:form>
            <h:inputText size="50" value="#{bean.text}" > 
              <a4j:support event="onkeyup" reRender="rep"/>
            </h:inputText>
            <h:outputText value="#{bean.text}" id="rep"/>
          </h:form>
        </f:view>
      </body>
    </html>
      

如你看到的,唯一一行于常给JSF面代码不同的就是下面的一?/p>

    <a4j:support event="onkeyup" reRender="rep"/>
      

在这里我们在父标{?<h:inputText>)中添加了一个AJAX 支持. 该支持绑定了JavaScript事g“onkeyup?.因此, 每一ơ该事g发布l父标签?我们的程序将发送一个AJAXh到Server.q意味着我们的受理的bean包含该“text?域中我们输入的最新数?

<a4j:support> 标签的“reRender?属?attribute)定义我们的页面的哪一部分被更? 在这?该页面唯一被更新的部位?<h:outputText> 标签,因ؓ他的ID值和“reRender?的属性值向匚w. 在一个页面中更新多个元素(elements)也是很简单的:仅仅把他们的IDs攑֜ “reRender?属性中可以了.

数据 Bean

当然?Zq行q个E序我们q需要一个受理的bean

        package demo;
        public class Bean {
        private String text;
        
        public Bean() {
        }
        
        public String getText() {
        return text;
        }
        
        public void setText(String text) {
        this.text = text;
        }
        }       
      

faces-config.xml

下一? 我们需要在faces-config.xml 中注册上面的bean:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD 	JavaServer Faces Config 1.1//EN"
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
    <faces-config>
      <managed-bean>
        <managed-bean-name>bean</managed-bean-name>
        <managed-bean-class>demo.Bean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
          <property-name>text</property-name>
          <value/>
        </managed-property>
      </managed-bean>
    </faces-config>
      

注意:q里没有M东西直接和Ajax4jsf 有关?

Web.xml

最?不要忘了djar文g和更?web.xml 文g:

    <?xml version="1.0"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      
      <display-name>a4jEchoText</display-name>
      <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
      </context-param>
      <filter>
        <display-name>Ajax4jsf Filter</display-name>
        <filter-name>ajax4jsf</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>ajax4jsf</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
      </filter-mapping>
      <listener>
        <listener-class>
          com.sun.faces.config.ConfigureListener
        </listener-class>
      </listener>
      
      <!-- Faces Servlet -->
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>
          javax.faces.webapp.FacesServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
      <!-- Faces Servlet Mapping -->
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
      </servlet-mapping>
      <login-config>
        <auth-method>BASIC</auth-method>
      </login-config>
    </web-app>
      

p样了, 现在你的E序应该可以工作?

部v

最l?你可以在Servlet容器中部|你的程序了. 在你喜欢的容器中部v,然后在你的浏览器中输? http://localhost:8080/a4jEchoText/echo.jsf



W三?under way................


冰雨 2006-08-11 21:31 发表评论
]]>
Wicket 教程4:如何使用Form 和formlghttp://www.tkk7.com/51AOP/archive/2006/08/09/62503.html冰雨冰雨Wed, 09 Aug 2006 01:34:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/09/62503.htmlhttp://www.tkk7.com/51AOP/comments/62503.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/09/62503.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/62503.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/62503.html Form大概是动态web中用最多的?在wicket中提供了灉|的form处理和呈? 可以实现强大的功?同时使用h也是很简单的. 看几个示例就知道如何使用? 下面是一个基本form的示?
代码下蝲: http://bbs.hexiao.cn/read.php?fid=9&tid=16&fpage=1
所需库文件下? http://bbs.hexiao.cn/read.php?fid=9&tid=12&fpage=1
java code:
// Add a FeedbackPanel for displaying our messages
           FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
           add(feedbackPanel);

           // Add a form with an onSubmit implementation that sets a message
           add(new Form("form") {
                 protected void onSubmit() {
                       info("the form was submitted!");
                 }
           });

           // 试button form
           Form buttonForm = new Form("buttonForm") {
                 protected void onSubmit() {
                       info("点击了buttonForm.");
                 }
           };

           Button button1 = new Button("button1") {
                 protected void onSubmit() {
                       info("button1.onSubmit 被点M");
                 }
           };
           buttonForm.add(button1);

           Button button2 = new Button("button2") {
                 protected void onSubmit() {
                       info("button2.onSubmit 被点M");
                 }
           };
           button2.setDefaultFormProcessing(false);
           buttonForm.add(button2);

           add(buttonForm);
           // 试 Submit link in form
           Form submitForm = new Form("submitForm") {
                 protected void onSubmit() {
                       info("Form onsubmit");
                 }
           };
           add(submitForm);
           SubmitLink internal = new SubmitLink("internal") {
                 protected void onSubmit() {
                       info("internal onsubmit");
                 };
           };
           submitForm.add(internal);

           SubmitLink external = new SubmitLink("external", submitForm) {
                 protected void onSubmit() {
                       info("external onsubmit");
                 };
           };
           add(external);

           // 试TextField And TextArea
           final Input input = new Input();
           Form textForm = new Form("textForm", new CompoundPropertyModel(input)) {
                 protected void onSubmit() {
                       info("input :" + input);
                       if (input.bool.booleanValue()) {
                             info("Ok, ok... we'll check it");
                       } else {
                             info("So you don't want it checked huh?");
                       }
                 }
           };
           add(textForm);
           textForm.add(new TextField("textField"));
           textForm.add(new TextField("integer", Integer.class));
           textForm.add(new TextArea("textArea"));
           textForm.add(new CheckBox("bool"));

Html code:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>Wicket Examples - component reference</title>
  <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<wicket:link><a href="CheckAndRadio.html">[go to the CheckAndRadio]</a></wicket:link>
<h2> Feed back info </h2>
      <span wicket:id="feedback">feedbackmessages will be put here</span>
     <h1>wicket.markup.html.form.Form</h1>

     <p>
     A Form is a component that has special interaction with nested form components.
     Form components are components that extend from wicket.markup.html.form.FormComponent,
     and which are called controls in the HTML specification. Examples of such controls
     are textfields, checkboxes and radio buttons.
     Users generally "complete" a form by modifying its controls (entering text,
     selecting menu items, etc.), before submitting the form usually by clicking on
     a submit button. On a form submit, the form normally goes through a processing cycle of
     validation, model updating of the nested controls, possibly persisting (with cookies)
     the model values of the controls and calling the form's onSubmit method.
     </p>
     <p>
     This example shows you the basic Form itself. It has no nested controls, but it does
     have an implementation of onSubmit, which sets a feedback message, and it works together
     with a feeback panel (a panel that lists any feedback messages that were set).
     </p>
     <p>
      <form wicket:id="form">
      <input type="submit" value="click me to submit the form and display a message" />
      </form>
     
      <h1> button form </h1>
      <form wicket:id="buttonForm">
           <input type="submit" value="non wicket submit button"/>
           <input wicket:id="button1" type="submit" value="default wicket button" />
           <input wicket:id="button2" type="submit" value="wicket button with immediate == true" />
      </form>
     
      <h1> Submit Link Form</h1>
      <form wicket:id="submitForm">
      <a wicket:id="internal">Internal SubmitLink</a>
      </form>
      <a wicket:id="external">External SubmitLink</a>
     </p>
     <h1>TextArea and TextField form</h1>
     <form wicket:id="textForm">

           <table style="border: 2px dotted #fc0; width: 300px; padding: 5px;">
            <tr>
            <td>some plain text</td>
            <td><input type="text" wicket:id="textField" /></td>
            </tr>
            <tr>
            <td>an integer value</td>
            <td><input type="text" wicket:id="integer" /></td>
            </tr>
            <tr>
            <td>text Area</td>
            <td><textarea wicket:id="textArea" rows="2" cols="15">Input comes here</textarea></td>
            </tr>
            <tr>
            <td valign="top">I want it checked!</td>
            <td>
            <input type="checkbox" wicket:id="bool" />
            </td>
            </tr>
            <tr>
            <td colspan="2" align="center">
              <input type="submit" value="submit" />
            </td>
            </tr>
           </table>

      </form>
     
     
</body>
</html>


截图:




冰雨 2006-08-09 09:34 发表评论
]]>
Wicket 教程4:如何使用 Include,Panel,Fragment,Linkhttp://www.tkk7.com/51AOP/archive/2006/08/08/62287.html冰雨冰雨Tue, 08 Aug 2006 01:25:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/08/62287.htmlhttp://www.tkk7.com/51AOP/comments/62287.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/08/62287.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/62287.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/62287.html Wicket 教程4:如何使用 Include,Panel,Fragment,Link

前面我没看到了如何用一些基本的markup,和几个示?/p>

( http://www.hexiao.cn/blog/index.php?job=art&articleid=a_20060807_153301  ), q次再来看看几个复杂一点的markup.

下次来看?Form 及其相关的markup的?

[b]Include [/b]是一个和JSP中的include指o功能差不多的markup,用来导入一个文?

可以使用l对和相对\径来导入文g, 该类的用是很简单的.
Java code:
 ...
  add(new Include("header", "header.html"));
  add(new Include("footer", "footer.html"));
    ...
and Html Code:

   ...
  <div>
   <div wicket:id="header">header comes here</div>
   <div>I am the body!</div>
   <div wicket:id="footer">footer comes here</div>
  </div>
   ...
 
上面可以实C个简单的布局框架.


[b]Panel: [/b]panel有点cM于swing中的panel,用来攄其他markup, panel的用也

是很单的, 如下:
创徏一个mypanelc?
class MyPanel extends Panel {
 
 public MyPanel(String id) {
  super(id);
  add(new Label("label", "yep, this is from a component

proper"));
  add(new AnotherPanel("otherPanel"));
 }
}

该类l承与Panel,里面d了两个markup,一个Label,另外一个Panel(Panel可以

无限嵌套). 然后~写对应的html文g. MyPanel.html

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="<head>
    <title>Wicket Examples - sample panel</title>
</head>
<body>
 <wicket:panel>
  <p style="border: 2px dotted #fc0; padding: 5px;">
   Here are some panel contents for ya.<br />
   Put arbitrairy Wicket components in your Panels,
   like this label: <span wicket:id="label" style="background-

color: aqua" >to be replaced</span>, or<br />
   even another panel: <span wicket:id="otherPanel" 

style="background-color: aqua">also to be replaced</span>.<br />
   You can nest panels any deep you want.
  </p>
 </wicket:panel>

</body>
</html>

下面是用上面的panel的代?
Java code:
...
 add(new MyPanel("panel"));
...
Html code:
    <span wicket:id="panel">panel contents come here</span>

[b]Fragment:[/b] 当有很多段信息要组l的时?使用很多panel可能是不雅观?q时

可以用Fragment?
CZ如下:
Java code:
...
    add(new Fragment("myPanel1", "frag2"));
...

Html code:
...
<span wicket:id="myPanel">Example input (will be removed)</span>
           
             <wicket:fragment wicket:id="frag1">panel

1</wicket:fragment>
             <wicket:fragment wicket:id="frag2">panel

2</wicket:fragment>
...


[b]Link:[/b] link是web面中的q接? q里的link可以是一切连??常用?lt;a/>

, button... q里的link 和JSF中的link所拥有的功能一样强?
下面来看几个CZ:
普通的link:
Java code:
...
 add(new Link("link1"));
...
Html code:
...
<a href="#" wicket:id="link1">this link is clicked <span

wicket:id="linkLabel1">n</span> times</a>
...
使用不同的html 可以昄Z同的样式,?
button样式的按?
Html code:
<button wicket:id="link2">this button is clicked <span

wicket:id="linkLabel2">n</span> times</button>

or:
<input type="button" wicket:id="link3" value="this button is clicked n

times" />

[b]ExternalLink:[/b] 是link的一U? 特别用来q接到该站点以外的资? CZ:
Java code:
...
//   add a link that goes to javalobby
add(new ExternalLink("externalLink1", "

JavaLobby"));
...

Html code:
...
 <a href="#" target="_new" wicket:id="externalLink1">this body

will be replaced</a>
...

[b]PageLink:[/b] 也是link的一U?实现面之间的蟩? CZ:
Java code:
...
 // 可以有多U方法用该c?下面是一U推荐的Ҏ
  add(new PageLink("pageLink", new IPageLink(){
   public Page getPage(){
    return new NonBookmarkablePage

(QuickStart4.this);
   }

   public Class getPageIdentity(){
    return NonBookmarkablePage.class;
   }
  }));

 ...
Html code:
...
 <a wicket:id="pageLink">go to our private/ non bookmarkable

page</a>
....

[b]BookmarkablePageLink:[/b] 也是link的一U?实现一U可以作Z{收藏的q接,?/p>

是无状态的q接. 可以带参C可以不带参数: CZ:

Java  code :
...
  add(new BookmarkablePageLink("pageLinkNoArgs",

BookmarkablePage.class));


  PageParameters parameters = new PageParameters();
  parameters.put("message", "This message was passed as a

page parameter argument");
  add(new BookmarkablePageLink("pageLinkWithArgs",

BookmarkablePage.class, parameters));

....

Html code:

...
<p>
 <a wicket:id="pageLinkNoArgs">go to our bookmarkable page

without passing any arguments</a>
 </p>

 <p>
 <a wicket:id="pageLinkWithArgs">go to our bookmarkable page

passing a message argument</a>
 </p>
...

讨论: http://bbs.hexiao.cn/thread.php?fid=9

代码下蝲: http://bbs.hexiao.cn/read.php?fid=9&tid=15&fpage=1 
允许所需要的cd,到这里下? http://bbs.hexiao.cn/read.php?fid=9&tid=12&fpage=1



冰雨 2006-08-08 09:25 发表评论
]]>
Wicket 教程3:使用 PageView 来调试页?/title><link>http://www.tkk7.com/51AOP/archive/2006/08/08/62286.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Tue, 08 Aug 2006 01:22:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/08/08/62286.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/62286.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/08/08/62286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/62286.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/62286.html</trackback:ping><description><![CDATA[使用 PageView 来调试页?<br /><br />Wicket中提供了一个PageViewc?֐思义 是查看当前page的信? 使用该类可以昄当前面的所有组? <br />使用Ҏ很简单在page中加上一个markup:   <span wicket:id="componentTree"/><br />然后 d一下代码到page的构造函C.<br /><br /><br />add(new PageView("componentTree", this));<br /><br />对于 Wicket教程2 的输Z息如?<br /><br /><br />[Page class = wicket.quickstart.Index, id = 2]:<br />#<br />Path<br />Size<br />Type<br />Model Object<br />1   <br />_   <br />423 bytes   <br />wicket.markup.html.internal.HtmlBodyContainer   <br />  <br />2   <br />border   <br />980 bytes   <br />wicket.quickstart.MyBorder   <br />  <br />3   <br />border:label   <br />458 bytes   <br />wicket.markup.html.basic.Label   <br />This is a label.   <br />4   <br />border:label2   <br />465 bytes   <br />wicket.markup.html.basic.Label   <br />This is another label.   <br />5   <br />boxBorder   <br />1.2K   <br />wicket.markup.html.border.BoxBorder   <br />  <br />6   <br />boxBorder:inBoxBorder   <br />468 bytes   <br />wicket.markup.html.basic.Label   <br />This is a Box Border   <br />7   <br />boxBorder:multiLineLabel2InBoxBorder   <br />645 bytes   <br />wicket.markup.html.basic.MultiLineLabel   <br />MultiLineLabel shows text that spans multiple lines by inserting line breaks (BR tags) for newlines and paragraph markers (P tags) for sequences of more than one newline.   <br />8   <br />multiLineLabel   <br />633 bytes   <br />wicket.markup.html.basic.MultiLineLabel   <br />MultiLineLabel shows text that spans multiple lines by inserting line breaks (BR tags) for newlines and paragraph markers (P tags) for sequences of more than one newline.   <br />9   <br />name   <br />N/A   <br />wicket.markup.html.basic.Label   <br />Icess   <br />10   <br />test   <br />454 bytes   <br />wicket.markup.html.basic.Label   <br />Hello World!  <br /><img src ="http://www.tkk7.com/51AOP/aggbug/62286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-08-08 09:22 <a href="http://www.tkk7.com/51AOP/archive/2006/08/08/62286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Wicket 教程2: 如何使用Label,MultiLineLabel,Border,BoxBorderhttp://www.tkk7.com/51AOP/archive/2006/08/07/62193.html冰雨冰雨Mon, 07 Aug 2006 07:29:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/07/62193.htmlhttp://www.tkk7.com/51AOP/comments/62193.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/07/62193.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/62193.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/62193.htmllabel是用来显C文本信息的(cM于JSF中的outputText),要显C的信息可以从PropertyModel中加?也就是可以显C动态信?

MultiLineLabel 是分行显CZ?在信息中有分行表C\n), 使用br表示分行,q在多行中用Dpl织.

Border 是一个方便从用的Layout,cM于swing中的layout, 使用
<wicket:border>?lt;wicket:body>来显Cborder和内?如下
      <wicket:border>
            First <wicket:body/> Last
          </wicket:border>

内容昄?lt;wicket:body>标签??
        <span wicket:id = "myBorder">
            Middle
          </span>

BoxBorder是在文章周围d一个黑U框的简单Border.

则输出结果ؓ:
        <body>
            First Middle Last
        </body>

CZ囄如下:
附g包含源代?
使用Ҏ,下蝲代码,copy到quickstart1中相应包中即?
代码下蝲: http://bbs.hexiao.cn/read.php?fid=9&tid=13&fpage=1

冰雨 2006-08-07 15:29 发表评论
]]>
Wicket 入门CZ :Hello World.http://www.tkk7.com/51AOP/archive/2006/08/05/61909.html冰雨冰雨Sat, 05 Aug 2006 02:38:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/05/61909.htmlhttp://www.tkk7.com/51AOP/comments/61909.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/05/61909.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/61909.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/61909.htmlWicket http://wicketframework.org/  是一个借鉴?Echo 和Tapestry 两个web框架的优点的基础上开发的一个新的web框架, Zlg是的开发web面, cM于开发java中的swingE序, 通过q种方式来开发web框架是中不错的思想. 最q?看看 wicket 感觉q比较简? 与jsf比v来感觉首先是没有了xml配置文g. 写一个Hello World的入门程序还是比较简单的.下面我们来看看如何写吧.

在附件中的程序是来自?wicket quickstart中的一个示? 我简单的做了一下修?d了一个Wicket??Label 标签用来昄 Hello World. 另外是从eclipse中直接导出的.包含?目配置文g. 下蝲附g直接q行 里面的start.java 可以启动里面自带的Jetty服务器了,然后在浏览器中输?
http://localhost:8081/quickstart/app
可以访问到我们的hello world E序?
now, download the files (Visit here : http://bbs.hexiao.cn/read.php?fid=9&tid=12&fpage=1 ) ,and enjoy it.

冰雨 2006-08-05 10:38 发表评论
]]>
decode javascript.encode using javahttp://www.tkk7.com/51AOP/archive/2006/08/01/61178.html冰雨冰雨Tue, 01 Aug 2006 05:18:00 GMThttp://www.tkk7.com/51AOP/archive/2006/08/01/61178.htmlhttp://www.tkk7.com/51AOP/comments/61178.htmlhttp://www.tkk7.com/51AOP/archive/2006/08/01/61178.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/61178.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/61178.html在前面一文?http://www.hexiao.cn/blog/index.php?job=art&articleid=a_20060730_130422)? 提到?关于IE中的 js.edcode的加密问? ׃要用这些加密后的信?p解密,在网l上找了一个js版本的解密程? ׃要在java中?把他{化ؓjava代码? 解密js.encode的java代码如下:

 

//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
/**
 * Decode encode
 * @author icess
 * @blog http://blog.matrix.org.cn/page/icess
 */
public class EncodeDecode {
 final int STATE_COPY_INPUT = 100;

 final int STATE_READLEN = 101;

 final int STATE_DECODE = 102;

 final int STATE_UNESCAPE = 103;

 int[] digits = new int[128];

 int[][] transformed = new int[3][128];

 int[] pick_encoding = { 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, 1,
   0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, 1, 1, 0, 2, 0, 2, 0,
   1, 0, 1, 1, 2, 0, 1, 0, 2, 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0,
   1, 0, 2 };

 int[] rawData = { 0x64, 0x37, 0x69, 0x50, 0x7E, 0x2C, 0x22, 0x5A, 0x65,
   0x4A, 0x45, 0x72, 0x61, 0x3A, 0x5B, 0x5E, 0x79, 0x66, 0x5D, 0x59,
   0x75, 0x5B, 0x27, 0x4C, 0x42, 0x76, 0x45, 0x60, 0x63, 0x76, 0x23,
   0x62, 0x2A, 0x65, 0x4D, 0x43, 0x5F, 0x51, 0x33, 0x7E, 0x53, 0x42,
   0x4F, 0x52, 0x20, 0x52, 0x20, 0x63, 0x7A, 0x26, 0x4A, 0x21, 0x54,
   0x5A, 0x46, 0x71, 0x38, 0x20, 0x2B, 0x79, 0x26, 0x66, 0x32, 0x63,
   0x2A, 0x57, 0x2A, 0x58, 0x6C, 0x76, 0x7F, 0x2B, 0x47, 0x7B, 0x46,
   0x25, 0x30, 0x52, 0x2C, 0x31, 0x4F, 0x29, 0x6C, 0x3D, 0x69, 0x49,
   0x70, 0x3F, 0x3F, 0x3F, 0x27, 0x78, 0x7B, 0x3F, 0x3F, 0x3F, 0x67,
   0x5F, 0x51, 0x3F, 0x3F, 0x3F, 0x62, 0x29, 0x7A, 0x41, 0x24, 0x7E,
   0x5A, 0x2F, 0x3B, 0x66, 0x39, 0x47, 0x32, 0x33, 0x41, 0x73, 0x6F,
   0x77, 0x4D, 0x21, 0x56, 0x43, 0x75, 0x5F, 0x71, 0x28, 0x26, 0x39,
   0x42, 0x78, 0x7C, 0x46, 0x6E, 0x53, 0x4A, 0x64, 0x48, 0x5C, 0x74,
   0x31, 0x48, 0x67, 0x72, 0x36, 0x7D, 0x6E, 0x4B, 0x68, 0x70, 0x7D,
   0x35, 0x49, 0x5D, 0x22, 0x3F, 0x6A, 0x55, 0x4B, 0x50, 0x3A, 0x6A,
   0x69, 0x60, 0x2E, 0x23, 0x6A, 0x7F, 0x09, 0x71, 0x28, 0x70, 0x6F,
   0x35, 0x65, 0x49, 0x7D, 0x74, 0x5C, 0x24, 0x2C, 0x5D, 0x2D, 0x77,
   0x27, 0x54, 0x44, 0x59, 0x37, 0x3F, 0x25, 0x7B, 0x6D, 0x7C, 0x3D,
   0x7C, 0x23, 0x6C, 0x43, 0x6D, 0x34, 0x38, 0x28, 0x6D, 0x5E, 0x31,
   0x4E, 0x5B, 0x39, 0x2B, 0x6E, 0x7F, 0x30, 0x57, 0x36, 0x6F, 0x4C,
   0x54, 0x74, 0x34, 0x34, 0x6B, 0x72, 0x62, 0x4C, 0x25, 0x4E, 0x33,
   0x56, 0x30, 0x56, 0x73, 0x5E, 0x3A, 0x68, 0x73, 0x78, 0x55, 0x09,
   0x57, 0x47, 0x4B, 0x77, 0x32, 0x61, 0x3B, 0x35, 0x24, 0x44, 0x2E,
   0x4D, 0x2F, 0x64, 0x6B, 0x59, 0x4F, 0x44, 0x45, 0x3B, 0x21, 0x5C,
   0x2D, 0x37, 0x68, 0x41, 0x53, 0x36, 0x61, 0x58, 0x58, 0x7A, 0x48,
   0x79, 0x22, 0x2E, 0x09, 0x60, 0x50, 0x75, 0x6B, 0x2D, 0x38, 0x4E,
   0x29, 0x55, 0x3D, 0x3F };

 public EncodeDecode() {
//  System.out.println(rawData[0]);
  init();
 }

 public String decode(String encodingString) {
//  System.out.println("encodingString  :  " + encodingString);
  String marker = "#@~^";
  String at;
  String encodingLable = null;
  String unEncodingString = "";
  int stringIndex = 0;
  int scriptIndex = -1;
  int unEncodingIndex = 0;
  int unEncodinglength = 0;
  int state = STATE_COPY_INPUT;
  // int statePos = 0;

  while (state != 0) {
   // System.out.println("in the Swith statePos is :" + statePos +
   // "State:" +state);
   switch (state) {
   case (STATE_COPY_INPUT):
    scriptIndex = encodingString.indexOf(marker, stringIndex);
    // System.out.println("scriptIndex1"+scriptIndex);
    if (scriptIndex != -1) {
     unEncodingString += encodingString.substring(stringIndex,
       stringIndex + scriptIndex);
     scriptIndex += marker.length();
     state = STATE_READLEN;
    } else {
     stringIndex = stringIndex == 0 ? 0 : stringIndex;
     unEncodingString += encodingString.substring(stringIndex,
       encodingString.length());
     state = 0;
    }
    break;

   case (STATE_READLEN):
    // System.out.println("scriptIndex"+scriptIndex);
    encodingLable = encodingString.substring(scriptIndex,
      scriptIndex + 6);
    unEncodinglength = decodeBase64(encodingLable);
    scriptIndex += (6 + "==".length());
    state = STATE_DECODE;
    break;

   case (STATE_DECODE):
    if (unEncodinglength == 0) {
     stringIndex = scriptIndex + "DQgAAA==^#~@".length();
     unEncodingIndex = 0;
     state = STATE_COPY_INPUT;
     break;
    }
    at = encodingString.substring(scriptIndex, scriptIndex + 1);
    if (at == "@")
     state = STATE_UNESCAPE;
    else {
     if (at.codePointAt(0) < 0xFF) {
      unEncodingString += String
        .valueOf((char) transformed[pick_encoding[unEncodingIndex % 64]][at
          .codePointAt(0)]);
      unEncodingIndex++;
     } else {
      unEncodingString += at;
     }
     scriptIndex++;
     unEncodinglength--;
     break;
    }

   case STATE_UNESCAPE:
    unEncodingString += unescape(encodingString.substring(
      ++scriptIndex, scriptIndex + 1));
    scriptIndex++;
    unEncodinglength -= 2;
    unEncodingIndex++;
    state = STATE_DECODE;
    break;
   }
  }

  // System.out.println("unEncodingString : " + unEncodingString);
  // Pattern pattern = Pattern.compile("JScript.Encode");
  // Matcher matcher = pattern.matcher(unEncodingString);
  // if(matcher.find()) {
  // System.out.println("unEncodingString 1: " + unEncodingString);
  // unEncodingString = unEncodingString.substring(0, matcher.start()) +
  // matcher.group() + unEncodingString.substring(matcher.end());
  // }

//  System.out.println("EncodeDecode.decode : unEncodingString  :  " + unEncodingString);
  return unEncodingString;
 }

 public int decodeBase64(String string) {
  int val = 0;
  val += (digits[string.codePointAt(0)] << 2);
  val += (digits[string.codePointAt(1)] >> 4);
  val += (digits[string.codePointAt(1)] & 0xf) << 12;
  val += ((digits[string.codePointAt(2)] >> 2) << 8);
  val += ((digits[string.codePointAt(2)] & 0x3) << 22);
  val += (digits[string.codePointAt(3)] << 16);
  return val;
 }

 public String unescape(String ch) { // no used, and no test
  // System.out.println("dddd");
  String escapes = "#&!*$";
  String escaped = "\r\n<>@";

  if (ch.codePointAt(0) > 126)
   return ch;
  int index = escapes.indexOf(ch);
  if (index != -1)
   return escaped.substring(index, index + 1);
  return "?";
 }

 public void init() {
  for (int i = 31; i <= 126; i++)
   for (int j = 0; j < 3; j++)
    transformed[j][rawData[(i - 31) * 3 + j]] = (i == 31) ? 9 : i;

  for (int i = 0; i < 26; i++) {
   digits['A' + i] = i;
   digits['a' + i] = i + 26;
  }
  for (int i = 0; i < 10; i++)
   digits['0' + i] = i + 52;
  digits[0x2b] = 62;
  digits[0x2f] = 63;
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // new EncodeDecode().decode("<script
  // language='JScript.Encode'>#@~^SwAAAA==-mD~DK'B8vZfF~!0FyF/TFFFZXFR!F8)TvZc82qsq98,TfZ+!wF{T;F&q*Z2T!Z1ZAqZFl!bEiyRAAAA==^#~@</script>");
  String plantext = new EncodeDecode()
    .decode("#@~^SwAAAA==-mD~DK'B8vZfF~!0FyF/TFFFZXFR!F8)TvZc82qsq98,TfZ+!wF{T;F&q*Z2T!Z1ZAqZFl!bEiyRAAAA==^#~@");
  System.out
    .println(plantext
      .equals("var ero='16031B08121C07110518011A06041E1F1D190D020F170C13140E00090B10150A';"));
  System.out.println("0".codePointAt(0) + " " + (int) 'a' + " "
    + (int) 'A');
  
  System.out.println("ididgigggi".indexOf("i", 1));
 }

}

现在可以得到需要的信息? 呵呵



冰雨 2006-08-01 13:18 发表评论
]]>
Lucene 索引常见格式的文件代?/title><link>http://www.tkk7.com/51AOP/archive/2006/07/25/59991.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Tue, 25 Jul 2006 06:07:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/07/25/59991.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/59991.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/07/25/59991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/59991.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/59991.html</trackback:ping><description><![CDATA[<br />LiA上的处理框架, 不错.<br /> <a >Lucene搜烦富文本文件之?-- 处理各种常见文g的框?/a>  <br /><br /><br />  <a >Lucene搜烦富文本文件之?-- HTML</a>  <br /><br /><br /><a >Lucene搜烦富文本文件之?--  XML</a><br /><br /><br /> <a >Lucene搜烦富文本文件之?-- RTF</a> <br /><br /><br />  <a >Lucene搜烦富文本文件之?-- MS word</a>  <br /><br /><br />  <a >Lucene搜烦富文本文件之一 -- pdf</a><img src ="http://www.tkk7.com/51AOP/aggbug/59991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-07-25 14:07 <a href="http://www.tkk7.com/51AOP/archive/2006/07/25/59991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Callisto l于可以下蝲?http://www.tkk7.com/51AOP/archive/2006/07/01/56061.html冰雨冰雨Fri, 30 Jun 2006 20:47:00 GMThttp://www.tkk7.com/51AOP/archive/2006/07/01/56061.htmlhttp://www.tkk7.com/51AOP/comments/56061.htmlhttp://www.tkk7.com/51AOP/archive/2006/07/01/56061.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/56061.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/56061.htmlCallisto l于可以下蝲?

Eclipse 3.2下蝲: http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.2-200606291905/eclipse-SDK-3.2-win32.zip

CallistoC下? http://www.eclipse.org/callisto/ 


Eclipse 3.2 - New and Noteworthy
http://download2.eclipse.org/eclipse/downloads/drops/R-3.2-200606291905/new_noteworthy/eclipse-news.html



冰雨 2006-07-01 04:47 发表评论
]]>
callisto(Eclipse 3.2) q到? ? http://www.tkk7.com/51AOP/archive/2006/06/30/56055.html冰雨冰雨Fri, 30 Jun 2006 15:04:00 GMThttp://www.tkk7.com/51AOP/archive/2006/06/30/56055.htmlhttp://www.tkk7.com/51AOP/comments/56055.htmlhttp://www.tkk7.com/51AOP/archive/2006/06/30/56055.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/56055.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/56055.html在今天早些时候访?callisto 的主?http://www.eclipse.org/callisto/ ) q可以看C个发布倒计? 现在发布旉C, 倒计时的钟表也不见了, q是没有发布, 只是留下一句话:  Callisto is coming soon

 

呵呵, 可能是在做一些后期处理工作给耽搁了吧. 看看wiki上的旉?http://wiki.eclipse.org/index.php/Callisto_Final_Daze ), 如下:

 

Friday 6/30

09:00 EDT

  • Denis to do a mirror-site sanity check. How many? Are they all done? Assuming all is well,
  1. (re)enable cluster sync
  2. All confirmed "go" with note to cross-project, committers lists
  3. Put web pages live, make announcements

09:30

watch eclipse.org servers glow red, especially build server

13:00

go have a beer -- to celebrate, if all is well, else, to cry in :)

 

? 不知道今天可以看到发布不.



冰雨 2006-06-30 23:04 发表评论
]]>
解析 Hibernate Validator http://www.tkk7.com/51AOP/archive/2006/05/18/46824.html冰雨冰雨Thu, 18 May 2006 07:17:00 GMThttp://www.tkk7.com/51AOP/archive/2006/05/18/46824.htmlhttp://www.tkk7.com/51AOP/comments/46824.htmlhttp://www.tkk7.com/51AOP/archive/2006/05/18/46824.html#Feedback0http://www.tkk7.com/51AOP/comments/commentRss/46824.htmlhttp://www.tkk7.com/51AOP/services/trackbacks/46824.html阅读全文

冰雨 2006-05-18 15:17 发表评论
]]>
Hibernate Validator ?/title><link>http://www.tkk7.com/51AOP/archive/2006/05/17/46563.html</link><dc:creator>冰雨</dc:creator><author>冰雨</author><pubDate>Wed, 17 May 2006 02:35:00 GMT</pubDate><guid>http://www.tkk7.com/51AOP/archive/2006/05/17/46563.html</guid><wfw:comment>http://www.tkk7.com/51AOP/comments/46563.html</wfw:comment><comments>http://www.tkk7.com/51AOP/archive/2006/05/17/46563.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/51AOP/comments/commentRss/46563.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/51AOP/services/trackbacks/46563.html</trackback:ping><description><![CDATA[<p> <font size="6"><a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> <b>Validator </b>?/font> </p> <p> <font color="#008000">在项目的业务属性中,你是不是要经帔R证属性的取D围呢. 惌了解比较优美的解x案吗?           </font> </p> <p align="left"> <font color="#008000">看看Hibernate Validator 是怎么做的?一见到?怿你就会说: Oh God, q就是我需要的.</font> </p> <p align="left"> <span style="color: Red;"> M获得Matrix授权的网站,转蝲请保留以下作者信息和链接Q?/span> <br /> 作者:icess(作者的blog:<a target="_new" >http://blog.matrix.org.cn/page/icess</a>)<br /> 关键字:Hibernate Validator</p> <p>用Annotations l类或者类的属性加上约?constraint),在运行期查属性值是很优雅的.Hibernate Validator是q样的一个框?该框架是十分Ҏ?像参考文档中宣称的那?,几乎没有什么学习曲U?Validator 是一个验证框?不需要和Hibernate的其他部分绑定就可以使用,只要在你的项目中dHibernate-annotations.jar库就可以?那么下面p我们看看怎么使用?</p> <p align="left"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">Person.java c?/font> </code> </p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* Created on 2006-1-12 Person.java</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* @author </font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package </b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Valid;</font> <br />  </code> </p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">/<font color="#808000">/@Serializability  //试自定义约?/font></span> </font> </code> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <br /> <font color="#7f0055"> <b>public class </b> </font> <font color="#000000">Person {</font> <br /> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>private </b> </font> <font color="#000000">String name;</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>private int </b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>private </b> </font> <font color="#000000">Address address;</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">Person() {}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#ff0000">@Valid //注意此处</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">Address getAddress() {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font> <font color="#000000">address;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">setAddress(Address address) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.address = address;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#000000">@Min(value = </font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public int </b> </font> <font color="#000000">getAge() {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">setAge(</font> <font color="#7f0055"> <b>int </b> </font> <font color="#000000">age) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.age = age;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#000000">@Length(min = </font> <font color="#990000">4</font> <font color="#000000">)</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">String getName() {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font> <font color="#000000">name;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">setName(String name) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.name = name;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left"> </p> <p align="left"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">Address.java c?/font> </code> </p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* Created on 2006-1-12 Address.java</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* @author </font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package </b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Max;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <br /> <font color="#7f0055"> <b>public class </b> </font> <font color="#000000">Address {</font> <br /> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>private </b> </font> <font color="#000000">String street;</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>private int </b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">Address() {}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#000000">@Min(value = </font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">  </font> <font color="#000000">@Max(value = </font> <font color="#990000">100</font> <font color="#000000">)</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public int </b> </font> <font color="#000000">getNum() {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">setNum(</font> <font color="#7f0055"> <b>int </b> </font> <font color="#000000">num) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.num = num;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#000000">@Length(min = </font> <font color="#990000">3</font> <font color="#000000">,max = </font> <font color="#990000">8</font> <font color="#000000">)</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">String getStreet() {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font> <font color="#000000">street;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">setStreet(String street) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.street = street;</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <div id="dhbvfll" class="java" align="left"> <p>上面是两个用 Validator Annotations 注释?c? 每个属性都?U束限制?  下面看看试的类?</p> </div> <p align="left"> <!-- ======================================================== --> <!-- = Java Sourcecode to HTML automatically converted code = --> <!-- = Java2Html Converter V4.1 2004 by Markus Gebhard markus@jave.de = --> <!-- = Further information: http://www.java2html.de = --> <font color="#000000"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> TestValidator.java c?/code> </font> </p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* Created on 2006-1-12</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">* @author icerain</font> <br /> <font color="#ffffff"> </font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package </b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.ClassValidator;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.InvalidValue;</font> <br /> <br /> <br /> <font color="#7f0055"> <b>public class </b> </font> <font color="#000000">TestValidator {</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public void </b> </font> <font color="#000000">test() {</font> <br /> <font color="#ffffff">    </font> <font color="#000000">Address add = </font> <font color="#7f0055"> <b>new </b> </font> <font color="#000000">Address();</font> <br /> <font color="#ffffff">    </font> <font color="#000000">add.setNum(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">    </font> <font color="#000000">add.setStreet(</font> <font color="#2a00ff">"1"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">    </font> <br /> <font color="#ffffff">    </font> <font color="#000000">Person p = </font> <font color="#7f0055"> <b>new </b> </font> <font color="#000000">Person();</font> <br /> <font color="#ffffff">    </font> <font color="#000000">p.setAddress(add);</font> <br /> <font color="#ffffff">    </font> <font color="#000000">p.setAge(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">    </font> <font color="#000000">p.setName(</font> <font color="#2a00ff">"ice"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">    </font> <br /> <font color="#ffffff">    </font> <font color="#3f5fbf">/******************Test validator ********/</font> </code> </p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#000000">    </font> <font color="#ff0000">// 注意该处只验证了Person Z说明 @Valid 注释的?/font> <br /> <font color="#ffffff">    </font> <font color="#000000">ClassValidator<Person> classValidator = </font> <font color="#7f0055"> <b>new </b> </font> <font color="#000000">ClassValidator<Person> (Person.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">);</font> <br /> <font color="#ffffff">    </font> <font color="#000000">InvalidValue[] validMessages = classValidator.getInvalidValues(p);</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>for </b> </font> <font color="#000000">(InvalidValue value : validMessages) {</font> <br /> <font color="#ffffff">      </font> <br /> <font color="#ffffff">    </font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"InvalidValue 的长度是:" </font> <font color="#000000">+ validMessages.length</font> <br /> <font color="#ffffff">        </font> <font color="#000000">+</font> <font color="#2a00ff">" . 验证消息? " </font> <font color="#000000">+ value.getMessage() </font> <br /> <font color="#ffffff">        </font> <font color="#000000">+ </font> <font color="#2a00ff">" . PropertyPath ?" </font> <font color="#000000">+ value.getPropertyPath()</font> <br /> <font color="#ffffff">        </font> <font color="#000000">+</font> <font color="#2a00ff">" .\n\t PropertyName ? " </font> <font color="#000000">+value.getPropertyName()</font> <br /> <font color="#ffffff">        </font> <font color="#000000">+ </font> <font color="#2a00ff">"Value ? " </font> <font color="#000000">+ value.getValue()</font> <br /> <font color="#ffffff">        </font> <font color="#000000">+</font> <font color="#2a00ff">" Bean ? "</font> <font color="#000000">+ value.getBean()</font> <br /> <font color="#ffffff">        </font> <font color="#000000">+</font> <font color="#2a00ff">"\n\t BeanClass ?" </font> <font color="#000000">+ value.getBeanClass());</font> <br /> <font color="#ffffff">    </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#ffffff">  </font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public static void </b> </font> <font color="#000000">main(String[] args) {</font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>new </b> </font> <font color="#000000">TestValidator().test();</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left"> </p> <p align="left">E序的输出如?<font size="2"></font></p> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:4 . 验证消息? 必须大于{于 1 . PropertyPath ?age .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? age. Value ? 0 Bean ? test.annotation.validator.Person@dd87b2</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:4 . 验证消息? 长度必须介于 4 ? 2147483647 之间 . PropertyPath ?name .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? name. Value ? ice Bean ? test.annotation.validator.Person@dd87b2</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:4 . 验证消息? 必须大于{于 1 . PropertyPath ?address.num .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? num. Value ? 0 Bean ? test.annotation.validator.Address@197d257</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Address</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:4 . 验证消息? 长度必须介于 3 ?8 之间 . PropertyPath ?address.street .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? street. Value ? 1 Bean ? test.annotation.validator.Address@197d257</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Address</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2">可以看出不满约束的值都被指Z.</font> </p> <font size="2"> </font> <p align="left"> <font size="2">同时该句: <code style="font-family: 'Courier New',Courier; font-size: 10pt;"><font color="#000000">ClassValidator<Person> classValidator = </font><font color="#7f0055"><b>new </b></font><font color="#000000">ClassValidator<Person> (Person.</font><font color="#7f0055"><b>class</b></font><font color="#000000">);</font></code></font> </p> <font size="2"> </font> <p align="left"> <font size="2">我们只验证了 Person. 在Person里面的Address的属?׃?code style="font-family: 'Courier New',Courier; font-size: 10pt;"><font color="#ff0000">@Valid Annotations </font>所?Address的相兛_性也被机联验证了 .</code></font> </p> <font size="2"> </font> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;"> <font size="2">如果 ?/font> </span> </code> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font size="2"> <font color="#ff0000">@Valid Annotations </font>L,l果如下:</font> </code> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:2 . 验证消息? 必须大于{于 1 . PropertyPath ?age .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? age. Value ? 0 Bean ? test.annotation.validator.Person@18fef3d</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">InvalidValue 的长度是:2 . 验证消息? 长度必须介于 4 ? 2147483647 之间 . PropertyPath ?name .</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">PropertyName ? name. Value ? ice Bean ? test.annotation.validator.Person@18fef3d</font> </font> </p> <font size="2"> </font> <p align="left"> <font size="2"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </font> </p> <font size="2"> </font> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">可以看出 没有验证 Address.</span> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">当然? ,你还可以只验证一个属?, 没有必要验证整个c?只需要在调用</span> <font face="Courier New, Courier">classValidator.getInvalidValues(p,"age")Ҏ? 加上你要验证的属性就可以?如我们只想验证age 属?把代码改为如下所C?</font> </code> </p> <p align="left"> <code> <font color="#ff0000" face="Courier New, Courier"> InvalidValue[] validMessages = classValidator.getInvalidValues(p,"age"); /</font> <font color="#0000ff" face="Courier New, Courier">/只验证age 属?/font> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">q行l果如下:</span> </code> </p> <p align="left"> <font color="#ff00ff">InvalidValue 的长度是:1 . 验证消息? 必须大于{于 1 . PropertyPath ?age .</font> </p> <p align="left"> <font color="#ff00ff">PropertyName ? age. Value ? 0 Bean ? test.annotation.validator.Person@1457cb</font> </p> <p align="left"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">只是验证?age 属?</span> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">怎么? ,很简单吧. 关于 <a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 内徏的验证Annotations 大家可以看看 API 或? 参考文?中文版我正在译?误问我?<a > Blog </a>获得最C?.</span> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;"> 如果你要写自qU束?, 你不用担?,q也是很Ҏ? </span> </code>MU束有两部分l成: [U束描述W? x释]the constraint <span id="hpzddlr" class="emphasis"><em>descriptor</em></span> (the annotation) 和[U束validator ?实现c] the constraint <span id="hfxrlhh" class="emphasis"><em>validator</em></span> (the implementation class).<code><span style="font-family: 'Courier New',Courier;">下面我们扩展Hibernate Test suit 中的一个Test 来讲解一?</span></code></p> <font size="2"> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;">首先: 要声明一?/span> </code>constraint <span id="ntvppnd" class="emphasis"><em>descriptor .如下:</em></span></p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#7f0055"> <b>package </b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">java.lang.annotation.Documented;</font> <br /> <font color="#7f0055"> <b>import static </b> </font> <font color="#000000">java.lang.annotation.ElementType.TYPE;</font> <br /> <font color="#7f0055"> <b>import static </b> </font> <font color="#000000">java.lang.annotation.ElementType.FIELD;</font> <br /> <font color="#7f0055"> <b>import static </b> </font> <font color="#000000">java.lang.annotation.ElementType.METHOD;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">java.lang.annotation.Retention;</font> <br /> <font color="#7f0055"> <b>import static </b> </font> <font color="#000000">java.lang.annotation.RetentionPolicy.RUNTIME;</font> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">java.lang.annotation.Target;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.ValidatorClass;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">* Dummy sample of a bean-level validation annotation</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">* </font> <font color="#7f9fbf">@author </font> <font color="#3f5fbf">Emmanuel Bernard</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">*/</font> <br /> <font color="#000000">@ValidatorClass(SerializabilityValidator.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">)</font> <br /> <font color="#000000">@Target({METHOD,FIELD,TYPE})</font> <br /> <font color="#000000">@Retention(RUNTIME)</font> <br /> <font color="#000000">@Documented</font> <br /> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">@interface Serializability {</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>int </b> </font> <font color="#000000">num() </font> <font color="#7f0055"> <b>default </b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">  </font> <font color="#000000">String message() </font> <font color="#7f0055"> <b>default </b> </font> <font color="#2a00ff">"bean must be serialiable"</font> <font color="#000000">;</font> <br /> <font color="#000000">}</font> </code> </p> </font> <p align="left"> <font size="2"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#000000">@ValidatorClass(SerializabilityValidator.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">) 指出?</font> </code>constraint <span id="rfrbddb" class="emphasis"><em>validator c?</em></span></font> </p> <p align="left"> <font size="2"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#000000">@Target({METHOD,FIELD,TYPE})</font> <br /> <font color="#000000">@Retention(RUNTIME)</font> <br /> <font color="#000000">@Documented                 </font> </code> </font> </p> <p align="left"> <code style="font-family: 'Courier New',Courier;"> <font color="#000000">q几个我׃用解释了?</font> </code> </p> <p align="left"> <code style="font-family: 'Courier New',Courier;"> <font color="#000000">Serializability 里面声明了一?message 昄U束的提CZ? num 只是Z说明一个方?在这里面没有实际用途用 .</font> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;"> 然后是 实现一?/span> </code>constraint <em><span id="rrllplt" class="emphasis">validator c?该类要实?/span></em><tt class="literal">Validator<ConstraintAnnotation></tt><em><span id="zfhjvlz" class="emphasis">.q里?/span></em><font size="2"><code style="font-family: 'Courier New',Courier; font-size: 10pt;"><font color="#000000">SerializabilityValidator.java 如下:</font></code></font></p> <p align="left"> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#3f7f5f">//$Id: SerializabilityValidator.java,v 1.3 2005/11/17 18:12:11 epbernard Exp $</font> <br /> <font color="#7f0055"> <b>package </b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">java.io.Serializable;</font> <br /> <br /> <font color="#7f0055"> <b>import </b> </font> <font color="#000000">org.hibernate.validator.Validator;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">* Sample of a bean-level validator</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">* </font> <font color="#7f9fbf">@author </font> <font color="#3f5fbf">Emmanuel Bernard</font> <br /> <font color="#ffffff"> </font> <font color="#3f5fbf">*/</font> <br /> <font color="#7f0055"> <b>public class </b> </font> <font color="#000000">SerializabilityValidator </font> <font color="#7f0055"> <b>implements </b> </font> <font color="#000000">Validator<Serializability>, Serializable {</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>public boolean </b> </font> <font color="#000000">isValid(Object value) {</font> <br /> <font color="#ffffff">   </font> <font color="#00ff00">//q里只是Validator 里面?实现验证规则?Ҏ. value 是要验证的?</font> <br /> <font color="#ffffff">    </font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN SerializabilityValidator isValid:"</font> <font color="#000000">+value.getClass()+</font> <font color="#2a00ff">": " </font> <font color="#000000">+value.toString()); </font> <br /> <font color="#ffffff">    </font> <font color="#7f0055"> <b>return </b> </font>value<font color="#3f7f5f"> </font><font color="#800080">instanceof</font><font color="#3f7f5f"> </font>Serializable<font color="#3f7f5f">;</font><br /><font color="#ffffff">  </font><font color="#000000">}</font><br /><br /><font color="#ffffff">  </font><font color="#7f0055"><b>public void </b></font><font color="#000000">initialize(Serializability parameters) {</font><br /><font color="#ffffff">    </font><font color="#3f7f5f">// 在这里可?取得 </font></code> <font size="2">constraint <em><span id="jnzrvlj" class="emphasis"> descriptor 里面的属?如上面我们声明的 num </span></em></font> <code style="margin: 0px; font-family: 'Courier New',Courier; font-size: 10pt;"> <br /> <font color="#ffffff">    </font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN SerializabilityValidator: parameters:"</font> <font color="#000000">+ parameters.num() );</font> <br /> <font color="#ffffff">  </font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left">然后在你的类中应用@<font size="2"><code style="font-family: 'Courier New',Courier; font-size: 10pt;"><font color="#000000">Serializability  可以约束一个类实现</font></code></font><code style="font-family: 'Courier New',Courier; font-size: 10pt;">Serializable 接口? 如下:</code></p> <p align="left">在我们的Person.javac?d@<font size="2"><code style="font-family: 'Courier New',Courier; font-size: 10pt;"><font color="#000000">Serializability  Annotations ,把Person.java 中的 </font></code></font><code><font size="2"><span style="font-family: 'Courier New',Courier;">/<font color="#808000">/@Serializability //试自定义约?</font>注释Lok?</span></font></code></p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">q行l果如下:</span> </font> </code> <font size="2"> <p align="left"> <font color="#ff00ff">InvalidValue 的长度是:3 . 验证消息? </font> <font color="#008000">bean must be serialiable</font> <font color="#ff00ff"> . PropertyPath ?null .</font> </p> <p align="left"> <font color="#ff00ff">PropertyName ? null. Value ? test.annotation.validator.Person@1a73d3c Bean ? test.annotation.validator.Person@1a73d3c</font> </p> <p align="left"> <font color="#ff00ff">BeanClass ?class test.annotation.validator.Person</font> </p> </font> </p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">现在把Personcd? java.io.Serializable 接口 则没有出?验证错误消息.</span> </font> </code> </p> <p align="left"> <code> <span style="font-family: 'Courier New',Courier;"> 消息的国际化也是很简单的,?/span> </code> <font size="2"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#000000">Serializability  中的message 改ؓ以{}扩住?属性文件的Key可以了 </font> </code> </font> </p> <p align="left"> <font size="2"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#7f0055"> <b>public </b> </font> <font color="#000000">@interface Serializability {</font> <br /> <font color="#ffffff">  </font> <font color="#7f0055"> <b>int </b> </font> <font color="#000000">num() </font> <font color="#7f0055"> <b>default </b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">  </font> <font color="#000000">String message() </font> <font color="#7f0055"> <b>default </b> </font> <font color="#2a00ff">"{Serializable}"; </font> <font color="#008000">//"bean must be serialiable"; </font> <font color="#ff0000">//消息的国际化</font> <br /> <font color="#000000">}</font> </code> </font> </p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;"> 然后~辑资料文g. 注意 该资源文件中要包?<a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 内徏的资? 可以在该org\hibernate\validator\resources 包里面的资源文g基础上修?,在打包里?q样可以了. 自己打包可能不太方便.你可以把该包里面的文件复制出?然后攑ֈ你自q目包下在自q? 该测试中 我是攑֜ test\resources 包下?</span> </font> </code> </p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">然后? 资源文g中添?</span> </font> </code> <font size="2"> <code style="font-family: 'Courier New',Courier; font-size: 10pt;"> <font color="#2a00ff">Serializable = '''''' </font>q么一? 样例如下:</code> </font> </p> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">#<font color="#ff0000">DefaultValidatorMessages.properties (DefaultValidatorMessages_zh.properties 不再列出^_^)</font></span> </font> </code> </p> <p align="left"> </p> <p align="left"> <code> <font color="#ff0000" face="Courier New, Courier" size="2"> #下面?<a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 内徏的国际化消息 </font> </code> <font size="2"> </font> </p> <p align="left"> <font size="2">validator.assertFalse=</font> <font color="#2a00ff" size="2">assertion</font> <font size="2"> </font> <font color="#2a00ff" size="2">failed</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.assertTrue=</font> <font color="#2a00ff" size="2">assertion</font> <font size="2"> </font> <font color="#2a00ff" size="2">failed</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.future=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">a</font> <font size="2"> </font> <font color="#2a00ff" size="2">future</font> <font size="2"> </font> <font color="#2a00ff" size="2">date</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.length=</font> <font color="#2a00ff" size="2">length</font> <font size="2"> </font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.max=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">less</font> <font size="2"> </font> <font color="#2a00ff" size="2">than</font> <font size="2"> </font> <font color="#2a00ff" size="2">or</font> <font size="2"> </font> <font color="#2a00ff" size="2">equal</font> <font size="2"> </font> <font color="#2a00ff" size="2">to</font> <font size="2"> </font> <font color="#2a00ff" size="2">{value}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.min=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">greater</font> <font size="2"> </font> <font color="#2a00ff" size="2">than</font> <font size="2"> </font> <font color="#2a00ff" size="2">or</font> <font size="2"> </font> <font color="#2a00ff" size="2">equal</font> <font size="2"> </font> <font color="#2a00ff" size="2">to</font> <font size="2"> </font> <font color="#2a00ff" size="2">{value}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.notNull=</font> <font color="#2a00ff" size="2">may</font> <font size="2"> </font> <font color="#2a00ff" size="2">not</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">null</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.past=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">a</font> <font size="2"> </font> <font color="#2a00ff" size="2">past</font> <font size="2"> </font> <font color="#2a00ff" size="2">date</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.pattern=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">match</font> <font size="2"> </font> <font color="#2a00ff" size="2">"{regex}"</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.range=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.size=</font> <font color="#2a00ff" size="2">size</font> <font size="2"> </font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <p align="left"> <font color="#2a00ff" size="2">#下面是自定义的消?/font> </p> <font size="2"> </font> <p align="left"> <font size="2">Serializable=</font> <font color="#2a00ff" size="2">Bean</font> <font size="2"> </font> <font color="#2a00ff" size="2">not</font> <font size="2"> </font> <font color="#2a00ff" size="2">Serializable  //加上自己定义的国际化消息. </font> </p> <font color="#2a00ff" size="2"> </font> <p align="left"> <code> <font size="2"> <span style="font-family: 'Courier New',Courier;">在构?/span> </font> <font face="Courier New, Courier" size="2">ClassValidator</font> <font size="2"> <span style="font-family: 'Courier New',Courier;"> 时要M 资源文g 如下:(在测试类?</span> </font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">ClassValidator<Person> classValidator = new ClassValidator<Person> (Person.class,<font color="#ff0000">ResourceBundle.getBundle("</font><font color="#0000ff">test.resources.DefaultValidatorMessages</font><font color="#ff0000">"</font>));//加蝲资源</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">q样可以了 .  当然 你还可以 更改 <a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 的消?不是在上面的资源文g中直接修?/font> </code> <font size="2">validator.length = ... {等 </font> <code> <font face="Courier New, Courier" size="2">) , q记?Validator 注释中有?message 元素? 你以前用的都是默认?现在你可以该Z自己定义的了.</font> </code> <font size="2">?validator.length 我把他改?"<font color="#0000ff">该字W串的长度不W合规定范围范围</font>". 在资源文件中d一行键值属性对(key定义?"<font color="#ff0000">myMsg</font>")如下:</font> </p> <p align="left"> <font size="2">myMsg=<font color="#0000ff">该字W串的长度不W合规定范围范围</font></font> </p> <p align="left"> <font size="2">q且q要?/font> <font color="#0000ff" size="2">@Length </font> <font size="2">注释中提供message的引用的key 如下</font> <font color="#0000ff" size="2">@Length(min = 4,message = "{</font> <font color="#ff0000" size="2">myMsg</font> <font color="#0000ff" size="2">}")</font> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">再一ơ运行测? ,我们可以看C面两条自定义l定的消息了 .如下:</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">InvalidValue 的长度是:3 . <font color="#008000">验证消息?/font>: <font color="#ff0000">Bean 不是 ?Serializable</font> . PropertyPath ?null .<br /> PropertyName ? null. Value ? test.annotation.validator.Person@1bd4722 Bean ? test.annotation.validator.Person@1bd4722<br /> BeanClass ?class test.annotation.validator.Person</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier"> <br /> InvalidValue 的长度是:3 . <font color="#008000">验证消息?/font>: <font color="#ff0000">该字W串的长度不W合规定范围范围</font> . PropertyPath ?name .<br /> PropertyName ? name. Value ? ice Bean ? test.annotation.validator.Person@1bd4722<br /> BeanClass ?class test.annotation.validator.Person</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier">怎么?比你惌的简单吧. </font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">OK 上面我们讨论?</font> </code><a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 的主要用? 但是 该框架有什么用? ^_^</p> <p align="left"> 看到q里其实不用我在多说?大家都知道怎么?什么时候用. 作ؓ一介l性文章我q是在此l出一个最常用的例子吧,更好的用方式大家慢慢挖掘吧.</p> <p align="left">比如 : 你现在在开发一个h力资?HR)pȝ (其实是我们ERP评的一个作?^_^), 里面要处理大量的数据,其是在输入各种资料?? 登记员工信息. 如果你公司的员工的年龄要求是18 -- 60 那么你所输入的年龄就不能出q个范围. 你可能会说这很容易啊 , 不用Validator可以解军_.q保持数据前验证可以啦 如if ( e.getAge() > 60 || e.getAge() < 18 ) ........ l出错误信息 然后提示重新输入不就OK?用得着 兴师动众的来个第三方框架? </p> <p align="left">是啊 当就验证q一个属性时, 没有必要?! 但是一个真正的HR pȝ,会只有一个属性要验证? 恐怕要有N多吧</p> <p align="left">你要是每一个都那样 写一D验证代?是不是很烦啊 ,况且也不方便代码重用. 现在考虑一? Validator 是不是更高效?拦截?U束q例?属?可以直接得?国际化的消息 可以把该消息昄C个弹出对话框?提示更正  !</p> <p align="left">Validator的用处不只这一U?,你可以想到如何用?! Ƣ迎发表你的高见!!</p> <p align="left"> OK 到此 我们?<a title="Hibernate Annotation 中文文档" target="_blank">Hibernate</a> Validator 之旅p先告一D落?. 希望q是令你心旷怡的一ơ寒冬之?</p> <p align="left"> 把你学到的应用到你的目中吧,一定会提高你的生率的. 怿?,没错的?^_^ !</p><img src ="http://www.tkk7.com/51AOP/aggbug/46563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/51AOP/" target="_blank">冰雨</a> 2006-05-17 10:35 <a href="http://www.tkk7.com/51AOP/archive/2006/05/17/46563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://beidemei.com" target="_blank">þ99ȾƷѹۿţţ</a>| <a href="http://tao-zhe.com" target="_blank">˳ɵӰվþ</a>| <a href="http://www-gogo.com" target="_blank">ձһƵۿ</a>| <a href="http://gz-shunan.com" target="_blank"></a>| <a href="http://aiqingdao999.com" target="_blank">ַ߹ۿ</a>| <a href="http://by8847.com" target="_blank">100018վ</a>| <a href="http://929119.com" target="_blank">Ƶ</a>| <a href="http://828556.com" target="_blank">AVַ߹ۿ</a>| <a href="http://shaolingtongluo.com" target="_blank">޼Ƶվ</a>| <a href="http://benjiebf.com" target="_blank">ŮҹëƬƵ</a>| <a href="http://kmp77.com" target="_blank">ŷ츾ۺϾþþþ</a>| <a href="http://ygloka.com" target="_blank">ձѸƵ</a>| <a href="http://yy885.com" target="_blank">ԻȫƵۿ</a>| <a href="http://kypbuy.com" target="_blank">ѳ߹ۿ</a>| <a href="http://lanoss.com" target="_blank">aëƬƵѹۿ</a>| <a href="http://bjgelinhotel.com" target="_blank">޳AƬ߹ۿ벻</a>| <a href="http://aicbbs.com" target="_blank">ˬaëƬ</a>| <a href="http://simupiao.com" target="_blank">޵av</a>| <a href="http://tiantangapp.com" target="_blank">ëƬѲ</a>| <a href="http://xsxdsb.com" target="_blank">һػaaaƬѿ</a>| <a href="http://ymiwang.com" target="_blank">˳ɾƷþþþ</a>| <a href="http://lyczyb.com" target="_blank">ѻɫַ</a>| <a href="http://xinyuanmy.com" target="_blank">a뾫Ʒɫҹ</a>| <a href="http://8dfk.com" target="_blank">337pձŷ޴</a>| <a href="http://bdyls.com" target="_blank">Ƶվ</a>| <a href="http://yeshenghuowang.com" target="_blank">ҹþ</a>| <a href="http://scdsrq.com" target="_blank">Ļ뾫ƷԴ</a>| <a href="http://959901cc.com" target="_blank">þù׾Ʒǿ</a>| <a href="http://zjztauto.com" target="_blank">ŮӰԺҪ</a>| <a href="http://chinacry.com" target="_blank">ѻɫappվ</a>| <a href="http://sxgzjssb.com" target="_blank">91Ѹվ</a>| <a href="http://wwwyy763.com" target="_blank">޴ɫС˵</a>| <a href="http://715686.com" target="_blank">ĻӰ߹ۿ </a>| <a href="http://www-554757.com" target="_blank">avר</a>| <a href="http://nyminer.com" target="_blank">һ߹ۿ</a>| <a href="http://tc116.com" target="_blank">¶ѿ</a>| <a href="http://by8847.com" target="_blank">ѹ߹ۿӰԺ</a>| <a href="http://taobaohuopin.com" target="_blank">߿վ</a>| <a href="http://pengkaimjg.com" target="_blank">ŷͽȺ</a>| <a href="http://hbjinmaitang.com" target="_blank">޹Ʒһڶҳ </a>| <a href="http://hkschooltv.com" target="_blank">պƷaӰԺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>