Struts2的参数绑定

Struts2的参数绑定固然好用,只需要在Action中声明参数属性,那么就能够实现表单参数的绑定,单我认为作为一个商业项目而言这种应用不可取。因为一个Action 80%的情况的是多用的,里面会有很多方法需要调用执行,那么如果每个方法的都采取Struts2的参数绑定传参势必造成Action中的属性泛滥,不利于开发和维护。我个人认为完全可以自己通过请求对象取出请求表单元素,当然为了效率,你可以封装一下代码:

以下是BaseAction类的代码:

Map<String,Object> _paramMap = new HashMap<String,Object>();
	/**
	 * 获得表单元素值
	 * @param name
	 * @return
	 */
	public Object getParam(String key){
		if (_paramMap.size()==0){
			Map<String,Object> paramMap = ActionContext.getContext().getParameters();		
			for (Map.Entry<String,Object> kvp : paramMap.entrySet()) {
				_paramMap.put(kvp.getKey().toUpperCase(),kvp.getValue());
			}
		}			
		
		if(!_paramMap.containsKey(key.toUpperCase()))
			return "";
		Object[] values =  (Object[])_paramMap.get(key.toUpperCase());
		if (values==null || values.length==0)
			return "";
		if (values.length==1)
			return values[0]==null?"":values[0];
		return values;	
	}
	
	/**
	 * 绑定参数到对象属性
	 * @param entity
	 * @param params
	 */
	public void bindParam2Bean(Object entity){
		
		Map<String,Object> paramMap = ActionContext.getContext().getParameters();
		if (paramMap==null || paramMap.size()==0)
			throw new InvalidParameterException("没有有效的参数可以绑定");
		Class classzz = entity.getClass();
		//將所有私有字段裝入Map<字段名,字段對象>
		Map<String,Field> fieldMap = new HashMap<String,Field>();
		for (Field f : classzz.getDeclaredFields()) {
			fieldMap.put(f.getName().toUpperCase(),f);
		}
		Field f = null;
		Object fvalue = null;
		for (Map.Entry<String,Object> kvp : paramMap.entrySet()) {
			try {
				Object[] values = (Object[])kvp.getValue();
				if (null != values && values.length==1){
					//f = classzz.getDeclaredField(kvp.getKey());
					f = fieldMap.get(kvp.getKey().toUpperCase());//從HashMap中取得字段對象[不區分大小寫]
					if ( null == f)
					 	continue;
					f.setAccessible(true);
					if (f.getType()==String.class){
						f.set(entity, values[0]);
					}else{
						fvalue = f.getType().getDeclaredMethod("valueOf",String.class).invoke(null, values[0]);
						f.set(entity, fvalue);
					}
						
				}
			} catch (Exception e) {
				if (super.LOG.isInfoEnabled())					
					super.LOG.info(java.text.MessageFormat.format("封装请求参数{0}到JavaBean的{1}属性失败[{2}]", kvp.getKey(),f.getName(),e.getMessage()));
			}
		}
	}


 

所有Action类继承自BaseAction类,子类中调用上面的父类方法实现参数获取非常方便,例如:

/**
	 * 添加诊所管理文章
	 * 
	 * @return
	 */
	public String addCliniqueArticle() {
		CliniqueArticle ca = null;
		try {
			ca = new CliniqueArticle();
			super.bindParam2Bean(ca);
			if (StringUtils.isBlank(ca.getTitle())
					|| !com.defshare.foundation.global.StringUtils.isValid(ca
							.getTitle())) {
				super.request.setAttribute("ErrorMessage", "诊所文章的标题不能为特殊字符或空");
				return "add_input";
			}
			if (StringUtils.isBlank(ca.getContent())) {
				super.request.setAttribute("ErrorMessage", "诊所文章的内容不能为空");
				return "add_input";
			}
			if (StringUtils.isBlank(ca.getSummary())) {
				super.request.setAttribute("ErrorMessage", "文章摘要不能为空");
				return "add_input";
			}
			if (null == ca.getOrderNum()) {
				ca.setOrderNum(0);
			}
			// 当没有上传图片时,则将设置为默认的图片
			if (StringUtils.isBlank(super.getUploadFileName())) {
				ca.setPic(super.DEFAULT_PIC);
			} else {
				ca.setPic(super.saveFile());
			}
			cliniqueArticleService.addCliniqueArticle(ca);
			super.request.setAttribute("ErrorMessage", "添加诊所文章信息成功");
			return "add_success";

		} catch (Exception e) {
			// 出异常时,当已经上传的图片删除
			new File(super.getSavePath() + "\\" + ca.getPic()).delete();
			super.addFieldError("message", e.getMessage());

			return "add_input";
		}
	}

	@SuppressWarnings("static-access")
	public String updateCliniqueArticle() {
		CliniqueArticle clinique = null;
		try {
			clinique = new CliniqueArticle();
			String id = super.getParam("cliniqueArticleId").toString();
			String title = super.getParam("title").toString();
			String summary = super.getParam("summary").toString();
			String content = super.getParam("content").toString();
			String defaultPic = super.getParam("dfpic").toString();
			clinique.setContent(content);
			clinique.setSummary(summary);
			clinique.setTitle(title);
			clinique.setCliniqueArticleId(Long.parseLong(id));

			if (null == clinique.getCliniqueArticleId()
					|| clinique.getCliniqueArticleId() < 1) {
				request.setAttribute("ErrorMessage", "管理文章编号无效!");
				super.request.setAttribute("clinique", clinique);
				return "update_input";
			}
			if (StringUtils.isBlank(clinique.getTitle())
					|| !com.defshare.foundation.global.StringUtils
							.isValid(clinique.getTitle())) {
				request.setAttribute("ErrorMessage", "文章管理标题不能为特殊字符或空!");
				super.request.setAttribute("clinique", clinique);
				return "update_input";
			}
			if (StringUtils.isBlank(clinique.getContent())) {
				request.setAttribute("ErrorMessage", "文章管理内容不能为空!");
				super.request.setAttribute("clinique", clinique);
				return "update_input";
			}
			if (StringUtils.isBlank(clinique.getSummary())) {
				request.setAttribute("ErrorMessage", "文章摘要不能为空");
				super.request.setAttribute("clinique", clinique);
				return "update_input";
			}
			if (!StringUtils.isBlank(defaultPic)) {
				clinique.setPic(DEFAULT_PIC);
			}
			// 获得图片,当用户上传图片的时候
			else if (!StringUtils.isBlank(super.getUploadFileName())) {
				clinique.setPic(super.saveFile());
			}
			// 获得原来的图片地址
			String oldPic = cliniqueArticleService.getCliniqueArticle(
					clinique.getCliniqueArticleId().longValue()).getPic();
			cliniqueArticleService.updateCliniqueArticle(clinique);
			// 判断是否是缺省图片
			if (!StringUtils.isBlank(super.getUploadFileName())) {
				if (!oldPic.equals(super.DEFAULT_PIC)) {
					new File(super.getSavePath() + "\\" + oldPic).delete();
				}
			}

			super.request.setAttribute("ErrorMessage", "修改诊所文章成功");
			return "update_success";
		}catch (NumberFormatException e) {
			request.setAttribute("ErrorMessage", "无效的编号信息");
			return "update_input";
		} 
		catch (Exception e) {
			super.request.setAttribute("clinique", clinique);
			request.setAttribute("ErrorMessage", e.getMessage());
			return "update_input";
		}

	}

	/**
	 * 后台显示诊所文章信息
	 * @return
	 */
	public String getAllCliniqueArticle() {
		try {
			int page = -1;
			int size = -1;
			// 获得当前页
			String index = super.getParam("pageIndex").toString();
			String pageSize = super.getParam("pageSize").toString();
			String title = super.getParam("title").toString().trim();
			PageInfo<CliniqueArticle> pageInfo = new PageInfo<CliniqueArticle>(
					CliniqueArticle.class);
			// 对当前页进行判断,如果为null则设置当前页为首页

			if (StringUtils.isBlank(index)) {
				index = "1";
			}
			if (StringUtils.isBlank(pageSize)) {
				pageSize = "10";
			}
			// 判断是否是数字
			if (!StringUtils.isNumeric(index)) {
				request.setAttribute("ErrorMessage", "当前页无效");
				return "page_input";
			} else {
				page = Integer.valueOf(index);
			}
			// 判断是否是数字
			if (!StringUtils.isNumeric(pageSize)) {
				request.setAttribute("ErrorMessage", "每页数据无效");
				return "page_input";
			} else {
				size = Integer.valueOf(pageSize);
			}
			pageInfo.setPageIndex(page);
			pageInfo.setPageSize(size);
			pageInfo.getConditions().add(
					new Condition("title", Compare.LIKE, title));
			cliniqueArticleService.getCliniqueArticleByPageInfo(pageInfo);
			// 将诊所文章的信息列表放到坏境中去
			request.setAttribute("pi", pageInfo);
			return "page_success";
		} catch (Exception e) {
			request.setAttribute("ErrorMessage", e.getMessage());
			return "page_input";
		}

	}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值