TXWeb帮助




作者:陈原   mail:39793751@qq.com   QQ:39793751    home: http://www.jspx.net

1.简介
TXWeb (Template XML Web 构架)是模仿xWork的一个事件驱动构架.设计思路差不多,但运行方式完全不同,WebWork2的内核就是xWork.而TXWeb 在xWork的基础上再简化,并且完全的丢掉了JSP.使用Freemarker 的数据模板方式.换句话就是,不需要JSP环境也可以独立的使用TXWeb .也没有了JSP标签,完全是模板.在JAVA内部完全的生成网页后,才交给WEB 服务器显示页面.当然借助了Servlet 容器来提供Web请求和基本的HTTP支持.
  • 本构架必须在jdk 1.5 以上版本,4.5GA版本后都在jdk1.6以后运行,4.5以后已经和sturct2的目标方向已经差别很大。本构架还是遵从小而精,减少开发工作量。并且让你的代码优美。


  • 1.页面生成流程图

     





    2.功能说明
    1. 模版语言生成页面,模板的使用方法可以参见scriptmark文档。
    2. jdk1.5的标签配置跳转,这样就可以实现零配置使用了。如果TXWeb检测到有配置优先配置.更容易维护,但在实际应用中个人感觉XML配置更好,因为调整方便,项目一大标签方式会很繁琐。
    3. 也可象Struts2(webwork2)那样配置跳转,配置action映射。action的生成是sioc控制,你可以自己配置是否使用单列,Aop等。TXWeb据有拦截器等功能。
    4. 内置了ajax支持,ajax传输使用了xml,json方式,4.5后推荐使用json方式,因为javascript调用json就一家人,很方便。
    5. 配置也支持通配符和缓存配置, <action method="@method">表示调用类的方法为method变量,<action method="@">表示调用的类方法为当前的url名,即action名。前者在后台设计上更加方便,后者能够实现resetfull方式,比较时候前台一些。
    3.例子说明 (一个简单的hello world)

    必须在基础配置上开始下边例子.
    例子里边有两个hello,下边可以看看如何分别得到.通过这个例子我们可以明白页面如何同bean进行交互数据.

    sioc 配置文件,方便注入TXWeb中使用,当然也可以不配置这一步,直接在TXWeb中直接配置,但推荐这样做.

    这里是TXWeb的配置文件.

    配置完成后我们可以看看如何调用配置的这个bean. 我们可以在根目录下创建一个hello.ftl的文件.(模板文件可以配置为不同的后缀). 但名称要和上边的hello一样,这样TXWeb就会自动的载入这个helloWordAction这个bean. 默认名称为 this 运行一样就能够看到效果了. 当然我们有时候文件名称不一定和上边的action name一样,这时候要载入bean也很简单.你可以使用下边的方法. action(参数1,参数2,....)
    参数1 :是否载入request参数.
    参数2 :是否要执行一个方法。
    其他参数,使用文本方式可以设置方法例如要设置 setOld(int old) 方法可以这样写, "old=12",
    变量设置完成后将放在Freemarker相应的变量中。
    test表示命名空间,也是文件放置的目录,对应的action也在sioc对应的命名空间查找,如果找不到在再sioc的global 命名空间查找。
    4.我们来演示一个带翻页的例子

    代码如下,注意 @TurnPage 的设置说明

    Sioc配置如下

    TXWeb配置如下

    页面代码文件turnlist.ftl

    5.下边在做一个拦截器的例子

    fmAction.java 文件完成显示的对应动作,或得到显示数据


    拦截器代码FmInterceptor.java


    Sioc配置


    TXWeb配置,和webwork2一样

    当我们在fm.ftl的页面文件中调用的时候就可以拦截了,一步我们在拦截器里边可以完成权限,日志等功能比较方便.

    6.下边我们做一个按钮的例子,并且可以使用标签跳转
    ResultTestAction.java

    下边例子不使用sioc配置,直接配置TXWeb来演示,实际使用中推荐使用sioc. TXWeb直接配置例子如下,type="class"表示是直接载入class不是从sioc中载入,默认sioc中载入.
    注意@operation,和上边代码的@Operate(submit = "operation", value = "save", caption = "test save")部分对应
    表示提交按钮的名称为operation,当提交的value为Operate的数值value相等的时候执行这个方法.如果不没有value表示. 不为空就执行这个方.

    调用代码为 testh.ftl
    点击按钮后会生成页面,并跳转到页面。

    7.一个简单的例子演示,熟练用法

    在这里新建一TestBean来演示模板标签的反向请求变量



    注意:前边我们的配置是,<action name="*" class="fmAction">,*表示如果没有找到对应的action 名,就调用fmAction这个sioc的 test.html,这里也可以使用标准表达式

    test/test.html  目录和上边的命名空间对应,虽然不一定要求对应
    载入的时候同样使用 <#assign testBean="fmAction@test"sioc()/> @前表示sioc中配置的名称.后边表示命名空间.
    如果没有写命名空间的话将使用当前的目录作为命名空间,如果也没有,最后在global命名空间里边查找.

    运行程序web服务器,根据你的配置 suffix=htm 输入URL地址,默认是htm,(注意如果有apache,你必须配置让apache 让出htm的请求转给java web服务器,比如resin)

    例如地址 http://localhost:8080/txweb/test.htm
    你就看到下边的效果了。

    这里输出一段文字
    测试输出:123456789

    这里载入其他的bean,也可以是sioc中配置的bean
    name:名称
    old:40

    本页对应action调用: 调用输出:西西
    调研完成:成功


    看看生成的HTML代码 ,是不是很干净漂亮并且<!-- --> 这样的注释不会输出给浏览器。
    <p>

    这里输出一段文字<br/>
    测试输出:123456789
    </p>
    <p>
    这里载入其他的bean,也可以是sioc中配置的bean<br/>

    name:名称<br/>
    old:40
    </p>

    本页对应action调用:
    调用输出:西西<br/>

    调研完成:成功<br/>

    8.TXWeb 中的annotation功能说明

    annotation标签名称 参数说明 功能说明
    MulRequest

    String covering() default "false"; //是否覆盖文件

    String saveDirectory() default "saveDirectory"; //保存目录

    String fileTypes() default "*"; //允许上传的文件类型

    String maxPostSize() default "800944751"; //最大上传大小

    上传方式,本构架已经整合上传组件,并且解决了中文问题,兼容flash和
    kindeditor的上传。FAQ有部分补充说明

    Operate

    //提交按钮名称
    String submit() default "";

    //是否需要提交后在执行 POST 提交才执行 GET不需要提交
    boolean submit() default true;


    //和 hasFieldInfo 相等的时候运行,fieldInfo保存错误信息
    boolean hasFieldInfo() default false;

    //动作名称描述
    String caption() default "";

    动作绑定bean方法
    Redirect

    //跳转方式 location redirect forward
    String type() default "redirect";

    //text/html; charset=UTF-8
    String contentType() default "";

    String location() default "";

    页面跳转,如果存在跳转将不执行其他任何方法包括execute
    Safety //判断是否过滤sql注入
    boolean check() default true;
    设置bean参数的时候防止sql注入
    TurnPage

    //模版文件名 turnpage.ftl
    String file() default "turnpage.ftl";
    //得到总行数方法
    String totalCount() default "@totalCount";
    //默认行数
    String rows() default "@count";
    //当前显示页数
    String currentPage() default "@currentPage";
    //一页显示的行数
    String count() default "@count";
    //翻页按钮个数
    String bound() default "3";
    //请求中的参数querystring
    String params() default "";

    //开关,为了提高性能,提交时候传递参数判断释放运行
    String enable() default "@pageEnable";

    翻页标签,使用的本页输出标签
    如果使用本UI的grid,ajax调用可以不使用本标签
    Validate

    //返回信息类型
    String infoType() default ValidatorDataType.all;
    //formId 校验Form ID

    String formId() default "";
    //sioc id

    String name() default "";
    //sioc 命名空间

    String namespace() default Sioc.global;
    //配置文件

    String submit() default "submit";

    验证,本验证使用在页面上和sober的验证java代码核心是一个,

    但有所不同,这里的使用javascript完成的。
    name为验证bean.
    <bean id="validator" class="com.jspx.txweb.support.ValidatorAction" singleton="true">
    <string name="configFile">验证配置文件.validator.xml</string>
    </bean>


    9.如何上传文件
    要上传文件的时候继承extends MultipartSupport, 并且留出multipartRequest的接口就可以了。 下边的代码已经在构架中,当理有其他需求的时候,可以自己继承后设置相关参数就可以了。
    DefaultUploadAction.java

    下边我们看看sioc配置
    com.jspx.txweb.support.UploadStatusAction 是TXWeb中已经有的,主要是得到上传时候的流量信息。
    能够实现ajax方式显示上传进度条。这里查看 swfupload 上传,本上传组件能很好的支持。

    下边是TXWeb的配置代码


    下边为页面代码upload.jsp
    如果想通过ajax得到上传状态信息,可以看演示。

    上边是一个简单的演示,在实际应用中上传方式 这里的更适合
    10.ajax验证TXWeb部分使用的是javascript来验证,sober部分当然不会是javascript了,但都是同一部分模块。

    下边我们配置一个要验证的form,假设里边有两个输入框需要验证,我们配置如下,dataType="验证的条件" field="要验证的输入框ID",msgId="显示消息的层id",needed="是否必须填写字段"
    保存为user.validator.xml文件。 dataType在程序中已经内带了大部分的验证方式。只需要调用就可以。如果有特别需要库自己扩展。
    验证名称 例子 说明
    isChinese isChinese 是否为中文
    isDate isDate 判断是否为日期格式
    isMobile isMobile 是否为手机号码
    StartsWith§endsWith startsWith[aaa]|endsWith[bbb] 判断开始字符是aaa| 判断结束字符是bbb
    equals equals[aaa] 判断字符是aaa
    isBetween isBetween(2,100) 数字在2-100范围
    isLengthBetween isLengthBetween(2,20) 判断是否字符串长度在2-20
    isDateTime isDateTime 判断是否为日期加时间的格式

    验证函数很多,你可以打开,com\jspx\scriptmark\jslib.js 看里边的函数,是判断类型的都可以在验证里边使用,所有的函数均可以在模板里边使用。


    sioc中配置载入验证接口,和要验证的user.validator.xml文件

    TXWeb中配置载入验证动作,使用ajax方式

    adduser.ftl

    虽然以上验证方式已经很丰富,但在实际应用中并不能满足要求,比如验证一个用户是否已经注册,验证码填写是否正确, 下边演示一个服务器端验证的例子,验证配置如下 TXWeb配置URL入口,采用RestFull方式 验证代码如下 HTML页面调用不变,new Request.Validator("validator.${suffix}", "reguserForm"), 就可以实现服务器方式验证了, 原理很简单,看验证配置的多了url="/user/validator/{field}.${suffix}?value={value}" ,对应的就是url入口, js将会自动替换{field}和{value}发送到服务器,服务器返回验证的情况
    11.相关说明

    1.TXWeb的基本配置,下边配置已经内置,不需要在配置。 2.TXWeb内带的返回类型包括了ajax的使用,必须在配置中注明type="ajax"才允许外部ajax调用。
    3.如何使用request,response? 继承ActionSupport后,你就直接可以直接使用这两个对象了。
    4.如何得到请求参数?继承ActionSupport类对,可以通过getString("变量名称"),getInt("变量名称")...得到相应类型的请求参数.
    4.addActionMessage保存消息,addFieldInfo 保存错误信息。
    5.返回类型支持xml,json等多种类型,已经足够使用,如果要返回其他类型你可以使用response直接输出。
    6.继承ActionSupport后你可以通过,getTemplatePath()得到当前页面所在的目录,getTemplateFile() 可以得到当前模板文件的所在路径。
    7.TXWeb和struts2一样的配置方式可以支持 。
    以上 配置表示,调用 ,bean的类的方法 method,method为变量,是request传递过来的。
    如果是 method="@" 这样表示调用方法为url的文件名称部分作为方法名。
    7.得到配置环境中的动作列表。"user" 表示命名空间
    得到所有动作配置列表 这样你就可用控制动作映射了,这些工资都已经整合在TXWeb, com.jspx.txweb.view.PermissionView


    8.不要使用如下变量方法传递外部参数,因为已经被默认占用

    9.com.jspx.txweb.view.TreeView,提供了树结构和整合数据库的功能。

    10.虽然功能和使用上都很相像struts2,但运行方式和运行流程上完全不同的。学习的有一定的struts2基础可以帮助的更快熟悉本构架,但运行方式上是完全不同的两个东西。 因为这个构架的是模板方式运行不需要编译,运行方式与php比较相似。具备了php语言的简便,保留了java的优点。

    10.TXWeb可以使用任意的模板文件后缀,访问URL也可以使用任意的文件后缀。是根据jspx.properties中设置的参数决定的。所以你在模板文件中是用后缀的时候统一使用 .${suffix}来代替后缀。配置的时候也可以。

    11.本构架是一个java和javascript交叉运行的一个构架,所以在不使用java的地方就是使用javascript。这样很方便。