关键字 Struts FormBean 关联 大小写
最近在学习Struts编程,刚接触就遇到了一些困惑,这些对来高手来说可能不值一提,而且对高
手来说通过查看Struts源代码直接就能找到答案。但对于新手来说也许实验是最直接的方法。
我是以网上广泛传播的helloapp为例子做的实验。
源代码请链接http://dev.youkuaiyun.com/article/47/47301.shtm
或http://blog.youkuaiyun.com/chenxiaohong3905/archive/2004/11/02/163738.aspx
环境:Struts 1.2+Tomcat 5.5.17+JDK 1.5 + Win2003
提交的大概过程是这样的:HTML的Form(客户提交的表单)-->HelloForm-->HelloAction...
在HTML的Form与HelloForm的如何关联让我有些困惑。
将HTML的Form数据提交给HelloForm有两种方式,一种是在JSP中应用Struts标签,这是helloapp
例子所采用的形式;另一种是直接在JSP中直接用标准的HTML标签编写Form。
第一种形式是通过setUserName和getUserName与JSP的Struts标签实现关联的,这种形式不做讨
论。
另一种形式是通过JSP的标准的HTML标签与FormBean建立联系。
<form name="HelloForm" method="post" action="/helloapp/HelloWorld.do">
Please enter a UserName to say hello to :
<input type="text" name="userName" maxlength="16" size="16"><br>
<input type="submit" name="submit" value="Submit">
<input type="reset" value="Reset">
</form>
有些论坛上说直接用标准的HTML标签提交的数据FormBean无法获得,但实验结果是可行的。
通过多次实验发现<input type="text" name="userName" maxlength="16" size="16">只与
FormBean中的setUserName建立联系。
与其它Form的属性或方法都没有关系。比如getUserName也可以写成其它形式,如getAbc,但Action
也要进行相应修改;HelloForm中的私有属性也可以更成其它的名称,不一定使用“private String
userName = null;”形式,可以使用“private String aaBB = null;”,不一定非要与 <input
type="text" name="userName" maxlength="16" size="16">对应。
由此说明在Struts结构中,name="userName"只与setUserName对应。但仔细观察,发现"U"的大小
写却不同。经过多次实验发现,name的属性第一个字母必须是大写的,如改成
name="UserName",setUserName则不行。问了一下QQ群的朋友说,告诉我说以前的版本Struts是如果
你在HelloForm里写成setUserName后,会先接受name="userName",没有的话再接受name="UserName"
。name="userName"是标准写法,至于为什么我的实验只能使用name="userName",朋友解释说可能是
新版本更加严格的原因吧。
以下是我的实验结果:
setUserName
name="userName"
可行
setUserName
name="UserName"
不可行
setuserName
name="UserName"
不可行
setuserName
name="userName"
可行
setSandyPig
name="SandyPig"
不可行
setSandyPig
name="sandyPig"
可行
由此可见,name的值的第一个字母必须是小写。
但有这样一种特殊情况就是:
setYYYY
name="YYYY"
可行
就是全部都是大写的时候也是可以的。这一点我还是懂不明白,是不是Java对变性,参数和方法的写
法有一套硬性的规定,这我就不知道了,哪位知道告诉我。或者哪位高手能看一下Struts源代码,指
出原因。