webx中通过velocity渲染得到如下效果:
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类,从而实现对应方法的调用!
<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"); } } }
#foreach( $info in $MyMap.entrySet()) <tr> <td>$info.name</td> <td>$info.email</td> <td>$info.appendInfo</td> </tr> #end 这样就可以实现前面所要实现的功能了!转载请注明 blog.csdn.net/whuslei ,如有错误请指教!
第一个功能是,允许通过用户名或者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类。主要是对外提供方法。
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
<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 $MyMap.entrySet()) <tr> <td>$info.name</td> <td>$info.email</td> <td>$info.appendInfo</td> </tr> #end 这样就可以实现前面所要实现的功能了!转载请注明 blog.csdn.net/whuslei ,如有错误请指教!