基于webx的小实例

webx中通过velocity渲染得到如下效果:

第一个功能是,允许通过用户名或者email对数据进行查询。
第二个功能是,查询出数据表中的所有记录。

【实验目的】 属性webx中spring和ibatis的使用!

1、修改sqlmap对应的xml文件,此处是NameList.xml,在sqlmap文件夹下,是ibatis的映射文件

<?xml version="1.0" encoding="GB2312"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://toolkit.alibaba-inc.com/dtd/ibatis/sql-map-2.dtd"> <sqlMap namespace="Names"> <typeAlias alias="namelist" type="com.taobao.webx.module.NameList" /> <resultMap id="namelistResult" class="namelist"> <result property="name" column="NAME" /> <result property="email" column="EMAIL" /> <result property="appendInfo" column="APPENDINFO" /> </resultMap> <!-- - =============================================== - 创建一个namelist对象 - =============================================== --> <insert id="addNameListInfo" parameterClass="namelist"> <![CDATA[ insert into SITE_USER ( NAME, EMAIL, APPENDINFO ) values ( #name#, #email#, #appendInfo# ) ]]> </insert> <!-- - =============================================== - 通过name 或者 email 查找user - =============================================== --> <select id="getNameListByName" resultMap="namelistResult" parameterClass="string"><![CDATA[ select SITE_USER.* from SITE_USER where SITE_USER.NAME = #value# ]]></select> <select id="getNameListByEmail" resultMap="namelistResult" parameterClass="string"><![CDATA[ select SITE_USER.* from SITE_USER where SITE_USER.EMAIL = #value# ]]></select> <select id="getTableView" resultMap="namelistResult"><![CDATA[ select SITE_USER.* from SITE_USER ]]></select> </sqlMap> 这个xml文件中包括了每个方法对于的SQL语句、参数、返回值。

2、新建一个NameListAO类。主要是对外提供方法。

public class NameListAO extends ApplicationObjectSupport{ private NameList newname; private NameListDAO nameListDAO; private String queryName; private String queryEmail; public void setQueryName(String name){ this.queryName = name; } public void setQueryEmail(String email){ this.queryEmail = email; } public void setNewname(NameList name){//对应"newname"的set方法 this.newname = name; } public void setNameListDAO(NameListDAO nameDAO){ this.nameListDAO = nameDAO; } public Result doAddNameList(){ //插入到数据库中 nameListDAO.addNameListInfo(newname); return new ResultSupport(); } public Result doGetNameListByName() { NameList resNamelist = nameListDAO.getNameListByName(queryName); Result res = new ResultSupport(); res.getModels().put("resNameList", resNamelist); return res; } public Result doGetNameListByEmail() { NameList resNamelist = nameListDAO.getNameListByEmail(queryEmail); Result res = new ResultSupport(); res.getModels().put("resNameList", resNamelist); return res; } public Result doGetTableView(){ List<NameList> resNamelists = nameListDAO.getTableView(); Result res = new ResultSupport(); res.getModels().put("tableview", resNamelists); return res; } } 这个类中引用了DAO类,因此先声明DAO接口,NameListDAO.java
package com.taobao.webx.dao; import java.util.List; import com.taobao.webx.module.NameList; public interface NameListDAO { void addNameListInfo(NameList namelist); NameList getNameListByName(String name); NameList getNameListByEmail(String email); List<NameList> getTableView(); } 这个还只是接口,因此需要实现类IbatisNameListDAO.java,是DAO具体实现的类
public class IbatisNameListDAO extends SqlMapClientDaoSupport implements NameListDAO { public void addNameListInfo(NameList namelist) { // TODO Auto-generated method stub getSqlMapClientTemplate().update("addNameListInfo",namelist); } public NameList getNameListByName(String name) { // TODO Auto-generated method stub return (NameList)getSqlMapClientTemplate().queryForObject("getNameListByName",name); } public NameList getNameListByEmail(String email) { // TODO Auto-generated method stub return (NameList)getSqlMapClientTemplate().queryForObject("getNameListByEmail",email); } @SuppressWarnings("unchecked") public List<NameList> getTableView() { // TODO Auto-generated method stub return (List<NameList>)getSqlMapClientTemplate().queryForList("getTableView"); } } AO类如何初始化呢?依靠两个文件:biz-ao.xml和biz-dao.xml
biz-ao.xml内容是
<beans default-autowire="byName"> <bean id="myname" class="com.taobao.webx.ao.NameListAO" singleton="false"/> </beans> biz-dao.xml内容是:
<beans default-autowire="byName"> <bean id="nameListDAO" class="com.taobao.webx.dao.impl.IbatisNameListDAO" /> </beans> 通过这两个文件,当command封装AO类和方法时就可以初始化对应的AO类和DAO类,从而实现对应方法的调用!

ok,先回到开始,如何建立像如图所示的那种vm文件?
先修改form.xml添加一个group

<!-- 通过用户名来查询 --> <group name="queryGroupID"> <field name="queryString"> <required-validator> <message>请输入查询的内容</message> </required-validator> </field> <field name="mySelect" /> </group> 对应的下拉框代码为
<select name="$group.mySelect.key"> <option value="用户名" selected>用户名</option> <option value="email" >email</option> </select> 【注意】 option标签间的内容是用来 “显示用的”,当你选择某个选项后你能取到的值其实“就是option中value对应的值!
所以,比如用户选择了email,则$group.mySelect.value 的内容就变成了value对应的值 email
【不同于input类型等输入型控件】
比如input ,<input type="text" name="$group.queryString.key" value="$!group.queryString.value" size="30"/>,需要先将value设定变量,当用户输入后,就能通过这个变量取得用户的输入。再比如<textarea name="$group.appendInfo.key" cols="30" rows="10">$!group.appendInfo.value</textarea>
【调试技巧】 可以通过简单的javascript代码进行测试!如<script> alert('$group.mySelect.value'); </script>
【如何跳转?】
<form action="" method="post"> <input type="hidden" name="action" value="name_list_action"/> <input type="submit" name="event_submit_do_show" value="Show"/> </form> ok,接着新建Action类并实现Command类的封装 public abstract class NameListAction extends TemplateAction{ protected abstract FormService getFormService(); protected abstract CommandDispatcher getCommandDispatcher(); @SuppressWarnings("unchecked") public void doAddName(RunData rundata, TemplateContext context) throws WebxException { Form form = this.getFormService().getForm(rundata); if (form.isValid()) { Group group = form.getGroup("addNameListGroupID"); NameList nameList = new NameList(); group.setProperties(nameList); //封装到spring中执行 Command command = new CommandSupport("myname","addNameList"); command.getParameters().put("newname", nameList);//调用set方法注入 Result res = this.getCommandDispatcher().execute(command); if(res.isSuccess()) { context.put("newNamelist", nameList); rundata.setRedirectTarget("viewNameList.vm"); } } } @SuppressWarnings("unchecked") public void doQuery(RunData rundata, TemplateContext context) throws WebxException { Form form = this.getFormService().getForm(rundata); if (form.isValid()) { Group group = form.getGroup("queryGroupID"); String select = group.getField("mySelect").getStringValue(); String query = group.getField("queryString").getStringValue(); Command command = null; if(select.equals("用户名")){ command = new CommandSupport("myname","getNameListByName"); command.getParameters().put("queryName", query); } else if(select.equals("email")) { command = new CommandSupport("myname","getNameListByEmail"); command.getParameters().put("queryEmail", query); } // System.out.println(select+","+query); Result res = this.getCommandDispatcher().execute(command); if(res.isSuccess()) { context.put("queryNamelist", res.getModels().get("resNameList")); context.put("queryClassfy",select); rundata.setRedirectTarget("query.vm"); } } } public void doShow(RunData rundata, TemplateContext context) throws WebxException { Command command = new CommandSupport("myname","getTableView"); Result res = this.getCommandDispatcher().execute(command); if(res.isSuccess()) { context.put("tableview", res.getModels().get("tableview")); rundata.setRedirectTarget("tableShow.vm"); } } }

Command类是通过new CommandSupport("AO类名称","要调用的AO类方法名")。

下面介绍下velocity中List变量如何在vm中渲染
【vm中变量的由来】要么是webx内置变量,如$form,要么是通过Context.put方法放入的,要么是form.xml中声明的!

#foreach($info in $FinalTable) <tr> <td>$info.name</td> <td>$info.email</td> <td>$info.appendInfo</td> </tr> #end 是用foreach遍历的。与Map类型不同,Map遍历如下
#foreach( $info in $MyMap.entrySet()) <tr> <td>$info.name</td> <td>$info.email</td> <td>$info.appendInfo</td> </tr> #end 这样就可以实现前面所要实现的功能了!转载请注明 blog.csdn.net/whuslei ,如有错误请指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该文档为官方webx框架文档,对webx进行了全面的讲解,非常实用,并附学习的Demo 为什么要用Webx而不是其它的开源框架? 现在有很多JavaWeb框架可供选择,并且它们也都是免费的。例如: • Struts • Webwork • Tapestry • Spring MVC 以上框架都是非常优秀的。说实话,如果阿里巴巴网站在2001年开始,就有这么多可选择的话,无论选择哪一个都不会有问题。因为这些年来,所有的开源Web框架都在互相学习、并趋于相似。Webx也不例外,它吸收了其它框架的很多想法。因此,当你使用Webx的时候,你会觉得在很多方面,它和其它开源的框架非常类似。我并不是说所有的框架都一样好,而是说只要假以时日,所有的框架在发展过程中,必然会积聚好的方面,淘汰坏的方面,从而变得足够好。从这个角度看,的确没有特别明显的理由来选择Webx,但也没有明显的理由不选择Webx。 另一方面,由于每一种框架采用不同的设计,必然会有各自的优势。Webx也是如此 —— 它在某些方面有一些独到的设计,超越了同类框架。Webx有哪些优势呢? Webx的优势 成熟可靠性 这个优势主要是针对阿里巴巴及属下网站而言。因为Webx在阿里巴巴和淘宝用了很多年。对于这种超大访问量的电子商务网站,Webx经受了考验,被证明是成熟可靠的。 开放和扩展性 • 对Spring的直接支持 —— Spring是当今主流的轻量级框架。Webx 3.0和Spring MVC一样, 完全建立在Spring框架之上,故可运用Spring的所有特性。 • 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种机制造就了Webx的非常好的扩展性,且比未经扩展的Spring更易使用。 • 开放性 —— Webx被设计成多个层次,层次间的分界线很清晰。每个层次都足够开放和易于扩展。你可以使用全部的Webx,也可以仅仅使用到Webx的任何一个层次。 引言 ............................................................................................................................... ix 1. 阅读向导 ............................................................................................................. ix 2. Webx是什么? .................................................................................................... ix 3. Webx的历史 ....................................................................................................... ix 4. 为什么要用Webx而不是其它的开源框架? ............................................................. x 5. Webx的优势 ........................................................................................................ x 5.1. 成熟可靠性 ................................................................................................ x 5.2. 开放和扩展性 ............................................................................................. x 6. Webx还缺少什么? .............................................................................................. x 部分 I. Webx框架概览 ......................................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值