回想起当年使用struts的时候,对他的tag真是又爱又恨。盼星星盼月亮,迎来了JSF。
然而,JSF的tag库虽然强大,却失去了灵活性,反而让人望而生畏。
S2JSF在通过seasar2的DI功能,把JSF标签注入到HTML页面,实现了类似模板引擎的功能。
示例如下:
如下图所示新建工程:
代码依次为:
AddAction.java
packageexamples.jsf.action;
publicinterfaceAddAction{
publicStringcalculate();
}
AddActionImpl.java
packageexamples.jsf.action.impl;
importexamples.jsf.action.AddAction;
importexamples.jsf.dto.AddDto;
importexamples.jsf.logic.AddLogic;
publicclassAddActionImplimplementsAddAction{
privateAddDtoaddDto;
privateAddLogicaddLogic;
publicvoidsetAddDto(AddDtoaddDto){
this.addDto=addDto;
}
publicvoidsetAddLogic(AddLogicaddLogic){
this.addLogic=addLogic;
}
publicStringcalculate(){
intresult=addLogic.calculate(addDto);
addDto.setResult(result);
returnnull;
}
}
allaop.dicon
<?xmlversion="1.0"encoding="Shift_JIS"?>
<!DOCTYPEcomponentsPUBLIC"-//SEASAR2.1//DTDS2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<includepath="aop.dicon"/>
<includepath="dao.dicon"/>
<includepath="j2ee.dicon"/>
<component
name="actionThrowsInterceptor"
class="examples.jsf.interceptor.ActionThrowsInterceptor"
/>
<component
name="actionInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethodname="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethodname="add"><arg>actionThrowsInterceptor</arg></initMethod>
</component>
<component
name="logicInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethodname="add"><arg>aop.traceThrowsInterceptor</arg></initMethod>
<initMethodname="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethodname="add"><arg>j2ee.requiredTx</arg></initMethod>
</component>
<component
name="daoInterceptorChain"
class="org.seasar.framework.aop.interceptors.InterceptorChain"
>
<initMethodname="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethodname="add"><arg>dao.interceptor</arg></initMethod>
</component>
</components>
AddDto.java
packageexamples.jsf.dto;
importjava.io.Serializable;
publicclassAddDtoimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
privateintarg1;
privateintarg2;
privateintresult;
publicAddDto(){
}
publicintgetArg1(){
returnarg1;
}
publicvoidsetArg1(intarg1){
this.arg1=arg1;
}
publicintgetArg2(){
returnarg2;
}
publicvoidsetArg2(intarg2){
this.arg2=arg2;
}
publicintgetResult(){
returnresult;
}
publicvoidsetResult(intresult){
this.result=result;
}
}
HelloDto.java
packageexamples.jsf.dto;
publicclassHelloDto{
privateStringname="S2JSF";
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
AppRuntimeException.java
packageexamples.jsf.exception;
importjava.text.MessageFormat;
importjava.util.ResourceBundle;
publicclassAppRuntimeExceptionextendsRuntimeException{
privatestaticfinallongserialVersionUID=1L;
privatestaticfinalObject[]EMPTY_ARGS=newObject[0];
privatestaticfinalStringBUNDLE_NAME="appMessages";
privateStringmessageId;
privateObject[]args;
publicAppRuntimeException(StringmessageId){
this(messageId,EMPTY_ARGS);
}
publicAppRuntimeException(StringmessageId,Object[]args){
this(messageId,args,null);
}
publicAppRuntimeException(StringmessageId,Object[]args,Throwablecause){
initCause(cause);
this.messageId=messageId;
this.args=args;
}
publicObject[]getArgs(){
returnargs;
}
publicStringgetMessageId(){
returnmessageId;
}
publicStringgetMessage(){
ResourceBundlebundle=ResourceBundle.getBundle(BUNDLE_NAME);
Stringpattern=bundle.getString(messageId);
returnMessageFormat.format(pattern,args);
}
}
ActionThrowsInterceptor.java
packageexamples.jsf.interceptor;
importjavax.faces.context.FacesContext;
importorg.aopalliance.intercept.MethodInvocation;
importorg.seasar.framework.aop.interceptors.ThrowsInterceptor;
importorg.seasar.jsf.util.MessageUtil;
importexamples.jsf.exception.AppRuntimeException;
publicclassActionThrowsInterceptorextendsThrowsInterceptor{
privatestaticfinallongserialVersionUID=1L;
publicStringhandleThrowable(AppRuntimeExceptionex,MethodInvocationinvocation)throwsThrowable{
FacesContextcontext=FacesContext.getCurrentInstance();
context.addMessage(null,MessageUtil.getErrorMessage(ex.getMessageId(),ex.getArgs()));
returnnull;
}
}
AddLogic.java
packageexamples.jsf.logic;
importexamples.jsf.dto.AddDto;
publicinterfaceAddLogic{
publicintcalculate(AddDtoaddDto);
}
AddLogicImpl.java
packageexamples.jsf.logic.impl;
importexamples.jsf.dto.AddDto;
importexamples.jsf.logic.AddLogic;
publicclassAddLogicImplimplementsAddLogic{
publicAddLogicImpl(){
}
publicintcalculate(AddDtoaddDto){
returnaddDto.getArg1()+addDto.getArg2();
}
}
RequestDumpFilter.java
packageexamples.jsf.util;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletContext;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
publicfinalclassRequestDumpFilterimplementsFilter{
privatestaticfinalLoglog=LogFactory.getLog(RequestDumpFilter.class);
privateFilterConfigconfig=null;
publicvoidinit(finalFilterConfigfilterConfig)throwsServletException{
config=filterConfig;
}
publicvoiddestroy(){
config=null;
}
privatestaticfinalStringINDENT=" ";
privatestaticfinalStringLF=System.getProperty("line.separator");
publicvoiddoFilter(finalServletRequestrequest,
finalServletResponseresponse,finalFilterChainchain)
throwsIOException,ServletException{
if(config==null){
return;
}
if(requestinstanceofHttpServletRequest){
finalHttpServletRequesthrequest=(HttpServletRequest)request;
log.debug(LF+LF
+"**before*****************************************:"
+gerServletPath(request)+LF+dumpRequest(hrequest));
try{
chain.doFilter(request,response);
}finally{
finalStringBuffersb=newStringBuffer();
RequestDumpUtil.dumpRequestAttributes(sb,hrequest,LF,INDENT);
RequestDumpUtil.dumpCookies(sb,hrequest,LF,INDENT);
RequestDumpUtil.dumpSessionAttributes(sb,hrequest,LF,INDENT);
RequestDumpUtil.dumpContextAttributes(sb,config
.getServletContext(),LF,INDENT);
log
.debug(LF
+LF
+"**after*****************************************:"
+gerServletPath(request)+LF+sb.toString());
}
}else{
chain.doFilter(request,response);
}
}
privateStringdumpRequest(finalHttpServletRequestrequest){
finalStringBuffersb=newStringBuffer();
finalServletContextcontext=config.getServletContext();
RequestDumpUtil.dumpRequestAndContextProperties(sb,request,context,
LF,INDENT);
RequestDumpUtil.dumpRequestParameters(sb,request,LF,INDENT);
RequestDumpUtil.dumpRequestAttributes(sb,request,LF,INDENT);
RequestDumpUtil.dumpCookies(sb,request,LF,INDENT);
RequestDumpUtil.dumpRequestHeaders(sb,request,LF,INDENT);
RequestDumpUtil.dumpSessionAttributes(sb,request,LF,INDENT);
RequestDumpUtil.dumpContextAttributes(sb,context,LF,INDENT);
returnsb.toString();
}
privateStringgerServletPath(finalServletRequestrequest){
if(requestinstanceofHttpServletRequest){
return((HttpServletRequest)request).getServletPath();
}
returnnull;
}
publicStringtoString(){
if(config==null){
return("RequestDumperFilter()");
}
finalStringBuffersb=newStringBuffer("RequestDumperFilter(");
sb.append(config);
sb.append(")");
return(sb.toString());
}
}
分享到:
相关推荐
seasar2框架中S2Dao使用指南,轻松掌握S2Dao 访问Oracle数据库的用法,与技巧
当前日本流行的开发框架,官方网站:http://www.seasar.org/我上传的这个是已经把各个框架集成好的,可以直接在上面进行开发。如有需要的话还可以加上DBFlute
s2-dao-1.0.50.zip seasar框架的讲解s2-dao
seasar2文档内容 快速上手 最初的一步 更进一步 S2Container指南 需要作成的文件 S2Container的定义 S2Container的生成 SingletonS2ContainerFactory的使用 S2ContainerFactory的使用 组件的取得 ...
小日本的开源框架 Seasar2 所 谓“Seasar2”就是一个“轻量级容器”,面向无法摆脱“Java 应用开发”之烦恼的所谓“开发者”,它能够保证开发的“高生产率和高品质”。并且同“其它轻量级容器”不同的是,“完全不...
seasar s2dao
无须用XML定义映射及实装代码的O/R Mapping 软件框架
DI Container with AOP
所谓“Seasar2”就是一个“轻量级容器”,面向无法摆脱“Java 应用开发”之烦恼的所谓“开发者”,它能够保证开发的“高生产率和高品质”。并且同“其它轻量级容器”不同的是,“完全不需要书写设定文件”,“就算是...
Seasar2这个框架在日本十分的流行。Seasar2其实就是类似于spring的一个提供DI功能的开源框架,但比Sping轻量级。 并且同“其它轻量级容器”不同的是,“完全不需要书写设定文件”,“就算是应用程序发生改动也无需...
seasar2的英文介绍,主要介绍seasar框架。pdf格式。
关于seasar2的PPT文件,经典!欢迎下载!
s2hibernate需要的jar包,主要用于日系seasar框架。
日本比较流行的框架 很不错的幻灯片
seasar教程,最流行的java开发框架之一,再过几年可能成为主流. struts与Spring与Hibernate的简化版本,国外很多大公司己经用了几年了,NEC,LG的软件开发都是用这个的。兄弟们快学吧
支持在Flash播放器中用Flex调用S2Container组件的软件库
seasar2,构建工程的pdf,讲解如何建工程。入门级资料。
日本鬼子的mvc框架。MVC Framework inspired by seasar2
seasar2 官方例子代码。 学习通过的话;对于java的开发就大有帮助。
seasar2.3之S2Backport175-2.3.22.zip