当Struts taglib遇上Java Bean

习惯了强大的Django template系统,再回归到Struts Taglib,难免会觉得束手束脚。Struts taglib提供了4种tag:Bean,HTML,Logic和Nested,具体介绍见[1]。用法很简单,网上有大量的例子。这儿说说当用Struts Taglib引用Java Bean生成的数据结构时,碰到的一个有趣的问题。废话少说,上例子。

 

TestBean.java:一个Java Bean,内含若干变量,比如可用于存储数据库表的数据。

public class TestBean {

	private String name;
	private boolean boo1; //boolean类型
	private boolean isBoo2; //boolean类型,请注意其命名
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public boolean isBoo1() {//由于boo1是boolean类型,其getter为“is”开头
		return boo1;
	}
	public void setBoo1(boolean boo1) {
		this.boo1 = boo1;
	}
	public boolean isBoo2() {{//同样是boolean类型 。但变量本身叫isBoo2,其getter不叫“isisBoo2”,而直接叫“isBoo2”。这就是问题所在。

		return isBoo2;
	}
	public void setBoo2(boolean isBoo2) {
		this.isBoo2 = isBoo2;
	}
}

SimpleAction.java:调用上面JavaBean的servlet。

public class SimpleAction extends Action {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		
		TestBean bea = new TestBean();
		bea.setName("I'm a bea.");
		bea.setBoo1(true);
		bea.setBoo2(true);
		
		request.setAttribute("bea", bea);
		return mapping.findForward("success");
	}
}

simple.jsp:用StrutsTaglib显示bean中的内容。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
<div>
	<p><bean:write name="bea" property="name"/></p>
	<p><logic:equal name="bea" property="boo1" value="true">My boo1 is true.</logic:equal></p>
	<p><logic:equal name="bea" property="isBoo2" value="true">My isBoo2 is true.</logic:equal></p>
</div>

当请求这个页面的时候,出错了。显示找不到属性“isBoo2”。若在TestBean中将起名字改为“boo2”,则可用Struts Taglib取其值。

不太懂Struts Taglib的内部机制, 猜测是由于“isBoo2”的getter名字不规范引起的。

 

结论:

当Struts taglib遇上Java Bean时,若要在bean中定义boolean类型的变量,请注意其命名,最好不要以“is”开头。

 

参考文献:

[1] Struts Taglib, http://struts.apache.org/1.x/struts-taglib/index.html


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值