Scope中的变量域

  在配置struts-config.xml时,scope属性有两个值,一个是session,另一个是request,如果我们不配置的话,默认值为session。session值与request值有什么区别呢?

 

  session是作为一个变量保存在程序中,它的生命周期较长,如果服务器不关闭的话,它会一直存在于系统中,这样很占用资源。而request则不同,它只是作为表单中的一个变量,在一次转发过程中有效,在再次转发或者重定向时,request对象会被释放,这样有利于节省系统的资源。

 

  虽然session有它的缺点,但是在一些需要长期保存数据的场合,session的优越性还是明显可见的。比如我们有多个表单之间传递数据时,这时我们就需要使用session而不是request。

 

  在我刚刚完成的一个Demo中,我发现在html中使用checkbox时,在页面重新进行访问时,如果我们不选择对象的话,session会取得上次的变量值,也就是说Struts中并不会像处理textbox一样每次访问重新取得input输入域中的值。如果checkbox没有把选中时,它存在于session中的值不会被重写清空。

 

  我们如何解决这个问题呢?那就是在首次调用Action时来清空ActionForm中的值,这样就能够避免checkbox在没有被选择时还可以保存上次的值,还是简单看一下代码吧:

 

public class StepActionForm extends ActionForm {
	private String username;
	
	private String[] productId;
	
	private String address;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String[] getProductId() {
		return productId;
	}

	public void setProductId(String[] productId) {
		this.productId = productId;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
	public void resetForm(){
		this.username=null;
		this.address=null;
		this.productId=null;
	}
}

 

 

public class StartAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {	
		StepActionForm saf=(StepActionForm)form;
		saf.resetForm();
		return mapping.findForward("success");
	}

}

 

 

<body>
    <form action="end.do" method="post">
    	用户信息:${StepActionForm.username }
    	产品信息:
    	<c:forEach var="p" items="${StepActionForm.productId}" varStatus="vs">
    		产品:${p }
    		<c:if test="${vs.count!=fn:length(StepActionForm.productId)}">
    			, 
    		</c:if>
    	</c:forEach>
    	
    	地址信息:${StepActionForm.address}
    	<input type="submit" value="完成"/>
    </form>
  </body>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值