可以使用<jsp:setProperty>动作元素来设定JavaBean的属性,您可以使用几个方式来进行设定: <jsp:setProperty name="someBean"
property="someProperty" value="somevalue" /> 下面的设定方式,可以将request中的某个请求参数指定至JavaBean的属性,例如将request的requestParam参数设定给 SomeProperty,如下: <jsp:setProperty name="someBean"
param="requestParam" property="someProperty" /> 您也可以不指定request的请求参数名称,而由JSP的自省(introspection)机制来判断是否有相同的请求参数名称,如果有的话就自动设定给JavaBean: <jsp:setProperty name="someBean" property="someProperty" />
上面的设定会查找request中是否有SomeProperty名称的请求参数,并自动设定给JavaBean的SomeProperty属性。 <jsp:setProperty>有个最有弹性的写法,就是将request的请求参数名称与JavaBean的属性名称交给自省机制来自动匹配,例如: <jsp:setProperty name="someBean" property="*" />
要注意的是,value设定的值必须是符合JavaBean中setXXX()对应之类型,例如若JavaBean的age属性接收的参数是int,则下面这行是不可行的: <jsp:setProperty name="someBean"
property="age" value="<%= request.getParameter("userAge") %>"/> getParameter()所取得的一定是String类型,而age所接收的类型是int,这么撰写的话,自省机制并不会进行,如果执行上面的这行, 则会发生argument type mismatch错误讯息,您必须先作好类型转换,再设定给JavaBean,例如: <%
int age = Integer.parseInt(request.getParameter("userAge")); %> <jsp:setProperty name="someBean" property="age" value="<%= age %>" /> 当然这样混用程序与标签于同一个网页中是不被鼓励的,所以建议是在JavaBean的值设定时,可以接收String类型,在于JavaBean中进行字符串转数值的工作。 在使用自省机制时,有一点要注意的是,如果有些属性找不到对应的参数,则不会设定任何的值,例如属性接收的是String类型,如果请求参数没有对应至属 性,则属性会设定为null,而不是空字符串;同样的,不要预期属性的值在自省之后没有设定时,会有自动初始化为您所想像的值,基本上,连上次您设定给 JavaBean的值也会被清空,所以最保险的作法,是假设所有的属性值都有被设定为null值的可能。 您也可以在使用<jsp:useBean>时一并设定属性值,例如: <jsp:useBean id="someBean" class="onlyfun.caterpillar.SomeBean">
<jsp:setProperty name="someBean"property="someProperty" value="somevalue" /> </jsp:useBean> 如此一来,如果找不到someBean时,则会新建一个Bean对象并设定其属性值;如果可以找Bean对象的话,则直接设定该Bean对象的属性值。 如果您打算直接使用某个请求参数的值设定给JavaBean,例如: <jsp:setProperty name="someBean"
property="name" value="<%= request.getParameter("userName") %>"/> 事实上您可以使用param属性来完成这件事: <jsp:setProperty name="someBean" property="age" param="userName"/> |