资费名称唯一性校验(struts2+jsp+json+jquery)

本文介绍如何使用Struts2框架结合JSON插件实现异步数据交互,包括所需依赖库、代码编写顺序及常见错误避免等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用到json,需要的全部jar包
commons-fileupload-1.2.1.jar
freemarker-2.3.15.jar
jstl.jar
ognl-2.7.3.jar
ojdbc6.jar
standard.jar
struts2-core-2.1.8.jar
struts2-json-plugin-2.1.8.jar
xwork-core-2.1.6.jar


代码编写顺序
--DAO
--Action
--struts.xml
--JSP:$.post, 回调函数

个人犯过的错:
在写Action时,直接只写private HashMap<String,Object> info;导致空指针异常
应写成private HashMap<String,Object> info = new HashMap<String,Object>();
个人认为原因是对象没有初始化。而java中String是默认初始化的,所以可以写成
private String name;

DAO:

public Cost findByName(String name) throws DAOException {
		if(name == null || name.length()==0){
			return null;
		}
		
		String sql = "select * from cost where name=?";
		Connection con = DBUtil.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setObject(1, name);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				Cost cost = createCost(rs);
				return cost;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DAOException("查询资费名称失败",e);
		}finally{
			DBUtil.close(con);
		}
		
		return null;
	}

Action:

public class CheckCostNameAction {
	
	
	public String execute(){
		
		ICostDAO dao = DAOFactory.getCostDAO();
		try {
			Cost cost =dao.findByName(name);
			//没有找到,说资费名不存在
			if(cost==null){
				info.put("pass", true);
				info.put("message", "资费名称可用");
			}else{
				info.put("pass", false);
				info.put("message", "资费名称不可用");
			}
			
		} catch (DAOException e) {
			e.printStackTrace();
			//发生异常,给予错误提示
			info.put("pass", "false");
			info.put("message", "发生系统异常");
		}
		
		return "success";
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Map<String, Object> getInfo() {
		return info;
	}
	public void setInfo(Map<String, Object> info) {
		this.info = info;
	}
	//input
	private String name;
	//output
	private Map<String, Object> info = new HashMap<String, Object>();
	
}

struts.xml:

<!--用到json在包里要修改继承-->
<package name="cost" namespace="/cost" extends="json-default">
<!-- 校验资费名 -->
<action class="netctoss.action.CheckCostNameAction" name="checkCostName">
	<result type="json" name="success">
		<param name="root">info</param>
	</result>
</action>

Jsp:

<!--用到jquery异步验证-->
<script language="javacript" type="text/javascript" src="../js/jquery-1.4.3.js"></script>

<input type="text" class="width300" name="cost.name" onblur="checkName();" id="costname"/>

<script language="javascript" type="text/javascript">
	//校验资费名称
	function checkName(){
		var costName = $("#costname").val();
		//校验资费名称是否为空
		if(costName == ""){
			$("#nameMsg").text("资费名称不能为空").addClass("error_msg");
			return;
		}
		
		//校验资费名称是否重复
		$.post(
			"checkCostName",
			{"name":costName},
			function(data){
				var info = data;//回调函数的参数接收请求返回的数据
				$("#nameMsg").text(info.message);
				if(info.pass){
					//验证通过移除错误样式
					$("#nameMsg").removeClass("error_msg");
				}else{
					//验证不通过添加错误样式
					$("#nameMsg").addClass("error_msg");
				}
			}
		);
	}
</script>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值