原创作者: 尹标平   阅读:1359次   评论:0条   更新时间:2011-06-05    
浅谈 BbossMVC 数据绑定,本文介绍BbossMVC框架的数据绑定功能。包括数字绑定,字符串绑定,日期类型绑定,日期数组类型绑定,bean对象绑定,List绑定,Map绑定,枚举类型绑定,枚举类型数组绑定。

本文涉及的技术包括:mvc,aop/ioc,taglib,jsp

数据绑定实例-jsp页面 Top

数据绑定实例-jsp页面
<%--

 *  Copyright 2008-2011 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.

 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java"
	session="false"%>
<%@ taglib uri="/WEB-INF/commontag.tld" prefix="common"%>	
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>

<head>
	<title>bboss-mvc - hello world,data bind!</title>
	<script type="text/javascript"
			src="../include/My97DatePicker/WdatePicker.js"></script>
	<pg:config enablecontextmenu="false"/>
		<script type="text/javascript">
		
			function doquery(){
				$("#queryresult").load("sayHelloEnum.page",{sex:$("#sex").val()});
			}
			
			function domutiquery(){
				$("#queryresult").load("sayHelloEnums.page",{sex:$("#sex").val()});
			}
		</script>	
</head>
<body>
			<h3>
				Hello World number bind Examples.
			</h3>
			<form action="sayHelloNumber.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr><td>
							请输入您的幸运数字:
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<common:request name="serverHelloNumber"/>
							<pg:error colName="name"/>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
			</form>
			<h3>
				Hello World String bind Examples.
			</h3>
			<form action="sayHelloString.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
						<td>
							请输入您的名字:
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<pg:empty requestKey="serverHello">
								没有名字,不问候。
							</pg:empty>
							<pg:notempty requestKey="serverHello">
								<common:request name="serverHello"/>
							</pg:notempty>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
			</form>
			<h3>
				Hello World Time bind Examples.
			</h3>
			<form action="sayHelloTime.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
						<td colspan="2">
							请输入您的幸运日期:
						</td>
					</tr>
					<tr >
					    <td align="right">
					   普通日期:
					    </td>
					    <td>
					   <input id="d12" name="d12" type="text"
				        onclick="WdatePicker({el:'d12'})" src="../include/My97DatePicker/skin/datePicker.gif" width="16" height="22" align="absmiddle"/>
					   </td>
					   </tr>
						<tr >
					    <td align="right">
						sql日期:
						</td>
					    <td>
						<input class="Wdate" type="text" name="stringdate" onClick="WdatePicker()">
						</td>
					   </tr>
					   <tr >
					    <td align="right">
						timestamp精确具体时间:
						</td>
					    <td>
						<input class="Wdate" type="text" name="stringdatetimestamp" onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH/mm/ss'})">
						</td>
					    </tr>
					
					<tr>
						<td colspan="2">
							来自服务器的日期问候:
							<common:request name="utilDate" dateformat="yyyy-MM-dd"/>
							<common:request name="sqlDate" dateformat="yyyy-MM-dd"/>
							<common:request name="sqlTimestamp" dateformat="yyyy-MM-dd HH/mm/ss"/>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
			</form>
			<h3>
				Hello World Time Array bind Examples.
			</h3>
			<form action="sayHelloTimes.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
                                                <td colspan="2">
							请输入您的幸运日期:
						
						</td>
					</tr>
					<tr >
					    <td align="right">
					   普通日期:
					    </td>
					    <td>
					   <input id="d12s" name="d12s" type="text"
				        onclick="WdatePicker({el:'d12s'})" src="../include/My97DatePicker/skin/datePicker.gif" width="16" height="22" align="absmiddle"/>
					   </td>
					   </tr>
						<tr >
					    <td align="right">
						sql日期:
						</td>
					    <td>
						<input class="Wdate" type="text" name="stringdates" onClick="WdatePicker()">
						</td>
					   </tr>
					   <tr >
					    <td align="right">
						timestamp精确具体时间:
						</td>
					    <td>
						<input class="Wdate" type="text" name="stringdatetimestamps" onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH/mm/ss'})">
						</td>
					    </tr>
					
					<tr>
						<td colspan="2">
							来自服务器的日期问候:
							<common:request name="utilDates" dateformat="yyyy-MM-dd"/>
							<common:request name="sqlDates" dateformat="yyyy-MM-dd"/>
							<common:request name="sqlTimestamps" dateformat="yyyy-MM-dd HH/mm/ss"/>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
				
			</form>
			<h3>
				Hello World Bean bind Examples.
			</h3>
			<form action="sayHelloBean.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
						<td>
							请输入您的名字:
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<pg:null actual="${serverHelloBean}">
								没有名字,不问候。
							</pg:null>
							<pg:notnull actual="${serverHelloBean}">
								<common:request name="serverHelloBean" property="name"/>
							</pg:notnull>
							
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
				
			</form>
			
			<h3>
				Hello World List<PO> bind  Examples.
			</h3>
			<form action="sayHelloBeanList.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
						<td>
							请输入您的名字:
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<pg:list requestKey="serverHelloListBean" >
								<pg:cell colName="name"/>
							</pg:list>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定">/td>						
					</tr>
				</tbody>
			</table>
				
			</form>
			
			<h3>
				Hello World Map<String,PO> bind  Examples.
			</h3>
			<form action="sayHelloBeanMap.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr><td>
							请输入您的名字:
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<pg:beaninfo requestKey="serverHelloMapBean" >
								<pg:cell colName="name"/>
							</pg:beaninfo>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定"></td>						
					</tr>
				</tbody>
			</table>
				
			</form>
			
			<h3>
				Hello World Array bind  Examples.
			</h3>
			<form action="sayHelloArray.page" method="post">
			<table cellspacing="0" >
				<tbody>
					<tr>
						<td>
							请输入您的名字两次(一定要两次哦):
						<input name="name" type="text">
						<input name="name" type="text">
						</td>
					</tr>
					<tr>
						<td>
							来自服务器的问候:
							<pg:list requestKey="serverHelloArray" >
								<pg:rowid increament="1"/> <pg:cell />
							</pg:list>
						</td>
					</tr>
					<tr>
						<td><input type="submit" name="确定" value="确定"></td>						
					</tr>
				</tbody>
			</table>
				
			</form>
			<h3>
				Hello World Enum bind  Examples.
			</h3>
			
			<table >
				
				<!--分页显示开始,分页标签初始化-->
					<tr >
						<th align="center">
							NAME:<select id="sex">
							<option value="F">F</option>
							<option value="M">M</option>
							<option value="UN">UN</option>
							</select>
						</th>
						<th>
							<input type="button" value="性别查询" onclick="doquery()"/>
							<input type="button" value="多性别查询" onclick="domutiquery()"/>
						</th>
					</tr>
					<tr >
						<td align="center">
							结果
						</td>
						 
						<td id="queryresult"></td>
					</tr>
			</table>	
</body>

数据绑定实例-控制器实现 Top

数据绑定实例-控制器实现,本文详细介绍控制中各种数据绑定控制器方法的编写方法。
1.控制器实现类
/**
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.  
 */
package org.frameworkset.mvc;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.frameworkset.util.annotations.MapKey;
import org.frameworkset.util.annotations.RequestParam;
import org.frameworkset.web.servlet.ModelMap;

/**
 * <p>
 * HelloWord.java
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * bboss workgroup
 * </p>
 * <p>
 * Copyright (c) 2009
 * </p>
 * 
 * @Date 2011-6-4
 * @author biaoping.yin
 * @version 1.0
 */
public class HelloWord
{

	public String sayHelloNumber(@RequestParam(name = "name") int ynum,
			ModelMap model)
	{

		if (ynum != 0)
		{
			model.addAttribute("serverHelloNumber", "幸运数字为[" + ynum + "]!");
		}
		else
			model.addAttribute("serverHelloNumber", "幸运数字为[" + ynum
					+ "]!,好像有点不对哦。");

		return "path:sayHello";
	}

	public String sayHelloString(@RequestParam(name = "name") String yourname,
			ModelMap model)
	{

		if (yourname != null && !"".equals(yourname))
			model.addAttribute("serverHello", "服务器向您[" + yourname + "]问好!");
		else
			model.addAttribute("serverHello", "请输入您的名字!");
		return "path:sayHello";
	}

	public String sayHelloTime(
			@RequestParam(name = "d12", dateformat = "yyyy-MM-dd") java.util.Date d12,
			@RequestParam(name = "stringdate", dateformat = "yyyy-MM-dd") java.sql.Date stringdate,
			@RequestParam(name = "stringdatetimestamp", dateformat = "yyyy-MM-dd HH/mm/ss") java.sql.Timestamp stringdatetimestamp,
			@RequestParam(name = "stringdatetimestamp") String stringdatetimestamp_,
			ModelMap model)
	{

		model.put("utilDate", d12);
		model.put("sqlDate", stringdate);
		model.put("sqlTimestamp", stringdatetimestamp);
		return "path:sayHello";

	}
	
	public String sayHelloTimes(
			@RequestParam(name = "d12s", dateformat = "yyyy-MM-dd") java.util.Date[] d12,
			@RequestParam(name = "stringdates", dateformat = "yyyy-MM-dd") java.sql.Date[] stringdate,
			@RequestParam(name = "stringdatetimestamps", dateformat = "yyyy-MM-dd HH/mm/ss") java.sql.Timestamp[] stringdatetimestamp,
			@RequestParam(name = "stringdatetimestamps") String[] stringdatetimestamp_,
			ModelMap model)
	{

		model.put("utilDates", d12[0]);
		model.put("sqlDates", stringdate[0]);
		model.put("sqlTimestamps", stringdatetimestamp[0]);
		return "path:sayHello";

	}

	public String sayHelloBean(ExampleBean yourname, ModelMap model)
	{

		if (yourname.getName() != null && !"".equals(yourname.getName()))
			model.addAttribute("serverHelloBean", yourname);
		else
			;

		return "path:sayHello";
	}

	public String sayHelloBeanList(List<ExampleBean> yourname, ModelMap model)
	{

		model.addAttribute("serverHelloListBean", yourname);

		return "path:sayHello";
	}

	public String sayHelloBeanMap(@RequestParam(name = "name") String yourname,
			@MapKey("name") Map<String, ExampleBean> mapBeans, ModelMap model)
	{

		model.addAttribute("serverHelloMapBean", mapBeans.get(yourname));
		return "path:sayHello";
	}
	
	public String sayHelloArray(@RequestParam(name = "name") String[] yournames,ModelMap model)
	{
		model.addAttribute("serverHelloArray",yournames);
		return "path:sayHello";
	}
	
	/**
	 * 测试单个字符串向枚举类型值转换
	 * @param type
	 * @param response
	 * @throws IOException
	 */
	public  void sayHelloEnum(@RequestParam(name="sex") SexType type,HttpServletResponse response) throws IOException
	{
		if(type != null)
		{
			if(type == SexType.F)
			{
				response.setContentType("text/html; charset=GBK");
				response.getWriter().print("女");
			}
			else if(type == SexType.M)
			{
				response.setContentType("text/html; charset=GBK");
				response.getWriter().print("男");
			}
			else if(type == SexType.UN)
			{
				response.setContentType("text/html; charset=GBK");
				response.getWriter().print("未知");
			}
				
		}
		
		
	}
	/**
	 * 测试单个字符串向枚举类型值转换
	 * @param type
	 * @param response
	 * @throws IOException
	 */
	public  void sayHelloEnums(@RequestParam(name="sex") SexType[] types,HttpServletResponse response) throws IOException
	{
		response.setContentType("text/html; charset=GBK");
		if(types != null)
		{
			if(types[0] == SexType.F)
			{
				
				response.getWriter().print("女");
			}
			else if(types[0] == SexType.M)
			{
				
				response.getWriter().print("男");
			}
			else if(types[0] == SexType.UN)
			{
				response.getWriter().print("未知");
			}				
		}		
	}
	
	public String index()
	{		
		return "path:sayHello";
	}
}


2.依赖的值对象-ExampleBean
/**
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.  
 */
package org.frameworkset.mvc;


/**
 * <p>ExampleBean.java</p>
 * <p> Description: </p>
 * <p> bboss workgroup </p>
 * <p> Copyright (c) 2009 </p>
 * 
 * @Date 2011-6-4
 * @author biaoping.yin
 * @version 1.0
 */
public class ExampleBean
{
	private String name = null;

	
	public String getName()
	{
	
		return name;
	}

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

}


3.依赖的枚举类型对象-SexType
/*
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.frameworkset.mvc;

/**
 * <p>Title: SexType.java</p> 
 * <p>Description: </p>
 * <p>bboss workgroup</p>
 * <p>Copyright (c) 2008</p>
 * @Date 2011-4-5
 * @author biaoping.yin
 * @version 1.0
 */
public enum SexType {
	F,M,UN

}

数据绑定控制器配置文件-bboss-helloworld.xml Top

数据绑定控制器配置文件-bboss-helloworld.xml
<properties>
	<property name="/examples/*.page"
		path:sayHello="/examples/hello.jsp"
		class="org.frameworkset.mvc.HelloWord">
	</property>
</properties>


数据绑定实战策略-实例eclipse工程下载和部署以及浏览 Top

数据绑定实战策略-实例eclipse工程下载和部署以及浏览:
1.下载本文的附件-mvc-databind.zip
http://dl.iteye.com/topics/download/6b4fc8b6-79dd-325f-b32a-4b69354b35a5
2.解压mvc-databind.zip ,将其中的工程导入eclipse即可查看文中相关的源代码
3.部署,准备好tomcat 6和jdk 15或以上的版本
4.在tomcat 6的conf\Catalina\localhost下增加mvc.xml文件,内容为:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:\workspace\bbossgroups-3.2\bestpractice\mvc\WebRoot" path="/mvc" debug="0" reloadable="false">
</Context>

用户可以根据自己的实际情况设置docBase属性的值
5.启动tomcat,输入以下地址即可访问mvc的数据绑定实例了:
http://localhost:8080/mvc/examples/index.page

附带说明一下,本文是参考bbossgroups 3.2版本功能编写。
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics