逍遥一派 发表于 2015-1-18 11:37:44

JAVA网页设计Struts的静态表单的使用

JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。静态
这篇文章以实例代码来论述Dynaforms在struts1.1种的援用??译者注

假如你利用过struts先前的版本,你就会注重到你必要消费大批的时分来写ActionForm类文件,而这些类文件关于struts都长短常关头的(它充任“View”的一部分),一般它的布局就是beanproperties在加上一个validate办法(偶然另有reset办法)。
跟着struts1.1版本的推出,开辟员有了别的一种办法来完成后面的义务:利用DynaBeans。DynaBeans静态天生JavaBeans。这就意味着我们能够经由过程设置(一般使用xml)
来天生formbean而不是在formbean中硬编码。
为了懂得DynaBeans(struts中为Dynaforms)是怎样工做的,让我们看一个复杂的表单,字段有:name,address,telephone等,上面的代码为一般的写法(没有利用Dynaforms)。

article1.CustomerForm

packagearticle1;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionErrors;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.action.ActionError;
importjavax.servlet.http.HttpServletRequest;
publicclassCustomerFormextendsActionForm{
protectedbooleannullOrBlank(Stringstr){
return((str==null)||(str.length()==0));
}
publicActionErrorsvalidate(ActionMappingmapping,
HttpServletRequestrequest){
ActionErrorserrors=newActionErrors();
if(nullOrBlank(lastName)){
errors.add("lastName",
newActionError("article1.lastName.missing"));
}
if(nullOrBlank(firstName)){
errors.add("firstName",
newActionError("article1.firstName.missing"));
}
if(nullOrBlank(street)){
errors.add("street",
newActionError("article1.street.missing"));
}
if(nullOrBlank(city)){
errors.add("city",
newActionError("article1.city.missing"));
}
if(nullOrBlank(state)){
errors.add("state",
newActionError("article1.state.missing"));
}
if(nullOrBlank(postalCode)){
errors.add("postalCode",
newActionError("article1.postalCode.missing"));
}
if(nullOrBlank(phone)){
errors.add("phone",
newActionError("article1.phone.missing"));
}
returnerrors;
}
privateStringlastName;
privateStringfirstName;
privateStringstreet;
privateStringcity;
privateStringstate;
privateStringpostalCode;
privateStringphone;
publicStringgetLastName(){
returnlastName;
}
publicvoidsetLastName(StringlastName){
this.lastName=lastName;
}
publicStringgetFirstName(){
returnfirstName;
}
publicvoidsetFirstName(StringfirstName){
this.firstName=firstName;
}
publicStringgetStreet(){
returnstreet;
}
publicvoidsetStreet(Stringstreet){
this.street=street;
}
publicStringgetCity(){
returncity;
}
publicvoidsetCity(Stringcity){
this.city=city;
}
publicStringgetState(){
returnstate;
}
publicvoidsetState(Stringstate){
this.state=state;
}
publicStringgetPostalCode(){
returnpostalCode;
}
publicvoidsetPostalCode(StringpostalCode){
this.postalCode=postalCode;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
this.phone=phone;
}
}

看到上边的写法(这么长一段代码[固然年夜多的工具都能够主动天生set和get办法]感受怎样?假如要为每个表单装备一个formbean,那末将是一件多了使人疾苦的事变??译者注),你晓得了它是一个尺度的JavaBean,只是多了一个validate办法,validate办法确保client断的输出都是正当的。

响应的jsp页面一样也是很复杂的,以下:

customer.jsp

<%@tagliburi="/WEB-INF/c.tld"prefix="c"%>
<%@taglibprefix="fmt"uri="/WEB-INF/fmt.tld"%>
<%@tagliburi="/WEB-INF/struts-tiles.tld"prefix="tiles"%>
<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>
<head>
<title>ExampleofastandardCustomerform</title>
</head>
<h1>ExampleofastandardCustomerform</h1>
<html:formaction="/addCustomer">
LastName:<html:textproperty="lastName"/>
<html:errorsproperty="lastName"/><br>
FirstName:<html:textproperty="firstName"/>
<html:errorsproperty="firstName"/><br>
StreetAddr:<html:textproperty="street"/>
<html:errorsproperty="street"/><br>
City:<html:textproperty="city"/>
<html:errorsproperty="city"/><br>
State:<html:textproperty="state"maxlength="2"size="2"/>
<html:errorsproperty="state"/><br>
PostalCode:<html:textproperty="postalCode"maxlength="5"
size="5"/>
<html:errorsproperty="postalCode"/><br>
Telephone:<html:textproperty="phone"maxlength="11"size="11"/>
<html:errorsproperty="phone"/><br>
<html:submit/>
</html:form>

响应的action也没有庞大的营业代码,只是将从client端传过去的值打印到把持台。
article1.AddCustomerAction
packagearticle1;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionForm;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.ServletException;
importjava.io.IOException;
publicclassAddCustomerActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
CustomerFormcustForm=(CustomerForm)form;
System.out.println("lastName="
+custForm.getLastName());
System.out.println("firstName="
+custForm.getFirstName());
System.out.println("street="+custForm.getStreet());
System.out.println("city="+custForm.getCity());
System.out.println("state="+custForm.getState());
System.out.println("postalCode="
+custForm.getPostalCode());
System.out.println("phone="+custForm.getPhone());
returnmapping.findForward("success");
}
}
上面看看struts-config.xml的设置,struts使用该设置文件将上述文件接洽到一同来协同完成义务。

<struts-config>
<form-beans>
<form-beanname="customerForm"type="jdj.article1.Customer"/>
</form-beans>
<action-mappings>
<actionpath="/addCustomer"type="article1.AddCustomerAction"
name="customerForm"scope="request"
input="/addCustomer.jsp">
<forwardname="success"path="/addCustomerSucceeded.jsp"
redirect="false"/>
</action>
</action-mappings>
<message-resourcesparameter="ApplicationResources"/>
<plug-inclassName="org.apache.struts.validator.ValidatorPlugIn">
<set-propertyvalue="/WEB-INF/validator-rules.xml"
property="pathnames"/>
struts-config.xml</plug-in></struts-config>
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-beanname="customerForm"type="article1.CustomerForm"/>
</form-beans>
<action-mappings>
<actionpath="/addCustomer"type="article1.AddCustomerAction"
name="customerForm"scope="request"input="/customer.jsp">
<forwardname="success"path="/addCustomerSucceeded.jsp"
redirect="false"/>
</action>
</action-mappings>
<message-resourcesparameter="ApplicationResources"/>
<plug-inclassName="org.apache.struts.validator.ValidatorPlugIn">
<set-propertyvalue="/WEB-INF/validator-rules.xml"
property="pathnames"/>
</plug-in>
</struts-config>

上边经由过程设置,customerForm来援用CustemerForm类,“/addCustomer”action利用customerForm而且触发article1.AddCustomerAction来处置哀求。
到如今为止,上边代码熟习struts得都应当很熟习可是,假如使用struts1.1的新特征,你将会用更少的代码来完成上述一样的功效。利用Dynaforms,我们应当变动customerForm在struts-config.xml中信息来利用org.apache.struts.action.DynaActionForm(为了便于读者对照利用前后的不同,我们将利用新的类新的jsp页面来完成一样的功效)

利用DynaActionForm,你能够使用form-propertyxml标签,它同意你在struts-config.xml中界说formbean的属性元素。以我们的例子来讲,struts-config.xml中将是以下这个模样:

<form-beanname="dynaCustomerForm"
type="org.apache.struts.action.DynaActionForm">
<form-propertyname="lastName"type="java.lang.String"/>
<form-propertyname="firstName"type="java.lang.String"/>
<form-propertytype="java.lang.String"name="street"/>
<form-propertyname="city"type="java.lang.String"/>
<form-propertyname="state"type="java.lang.String"/>
<form-propertyname="postalCode"type="java.lang.String"/>
</form-bean>
上边的修改关于jsp页面没有任何的影响。不外你要关于本来的action举行略微的修改应为:你如今已不在向execute()中传送formbean(没有getset办法),以是你应当把form转型到DynaActionForm,然后使用办法get(filename)来获得client端数据新的action代码以下:

article1.AddDynaCustomerAction
packagearticle1;
importorg.apache.struts.action.*;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.ServletException;
importjava.io.IOException;
publicclassAddDynaCustomerActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
DynaActionFormcustForm=(DynaActionForm)form;
System.out.println("lastName="+custForm.get("lastName"));
System.out.println("firstName="+custForm.get("firstName"));
System.out.println("street="+custForm.get("street"));
System.out.println("city="+custForm.get("city"));
System.out.println("state="+custForm.get("state"));
System.out.println("postalCode="
+custForm.get("postalCode"));
System.out.println("phone="+custForm.get("phone"));
returnmapping.findForward("success");
}
}

从上边的代码能够看出,仿佛”屏障“了actionform,但是我们也“丧失”了一些其他的,比如:严整输出正当性的成绩。有两种办法能够恢复校验功效:一是创立一个DynaActionForm的子类,然后在子类中完成validate()办法。以下代码:

article1.DynaCustomerForm
packagearticle1;
importorg.apache.struts.action.*;
importjavax.servlet.http.HttpServletRequest;
publicclassDynaCustomerFormextendsDynaActionForm{
protectedbooleannullOrBlank(Stringstr){
return((str==null)||(str.length()==0));
}
publicActionErrorsvalidate(ActionMappingmapping,
HttpServletRequestrequest){
ActionErrorserrors=newActionErrors();
if(nullOrBlank((String)this.get("lastName"))){
errors.add("lastName",
newActionError("article1.lastName.missing"));
}
if(nullOrBlank((String)this.get("firstName"))){
errors.add("firstName",
newActionError("article1.firstName.missing"));
}
if(nullOrBlank((String)this.get("street"))){
errors.add("street",
newActionError("article1.street.missing"));
}
if(nullOrBlank((String)this.get("city"))){
errors.add("city",newActionError("article1.city.missing"));
}
if(nullOrBlank((String)this.get("state"))){
errors.add("state",
newActionError("article1.state.missing"));
}
if(nullOrBlank((String)this.get("postalCode"))){
errors.add("postalCode",
newActionError("article1.postalCode.missing"));
}
if(nullOrBlank((String)this.get("phone"))){
errors.add("phone",newActionError("article1.phone.missing"));
}
returnerrors;
}
}
假如是如许,我们就要变动struts-config.xml来利用DynaActionForm的子类,如许的效果仿佛是又回到了先前的模样(为每个表单写DynaActionForm),呵呵。。。
以是保举的做法是利用struts1.1种的ValidatorFramework,这方面的内容在今后的文章中在申明。

关于
JamesTurneristheownerandmanagerofBlackBearSoftware,LLC,whichspecializesincustomJava-basede-CommerceandCRMsolutionsdelivery.Heisalsotheauthorof"MySQLandJSPWebApplications:Data-DrivenProgrammingUsingTomcatandMySQL"(ISBN:0672323095)andistheco-authorof"Struts:KickStart"(ISBN:0672324725),whichwillbepublishedinNovember.Hecanbereachedatturner@blackbear.com.


JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。

小魔女 发表于 2015-1-21 11:25:19

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

莫相离 发表于 2015-1-25 18:17:18

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

山那边是海 发表于 2015-1-26 09:52:44

Java是一种计算机编程语言,拥有跨平台、面向对java

分手快乐 发表于 2015-1-31 06:20:57

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

小妖女 发表于 2015-1-31 15:42:05

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

老尸 发表于 2015-2-3 20:08:49

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

admin 发表于 2015-2-9 04:43:15

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

若相依 发表于 2015-2-18 16:18:59

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

深爱那片海 发表于 2015-3-3 19:09:53

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

兰色精灵 发表于 2015-3-4 02:10:48

是一种为 Internet发展的计算机语言

谁可相欹 发表于 2015-3-11 15:01:05

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

精灵巫婆 发表于 2015-3-11 15:54:02

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

透明 发表于 2015-3-18 23:23:09

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

金色的骷髅 发表于 2015-3-19 17:09:58

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

愤怒的大鸟 发表于 2015-3-28 22:19:06

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

飘飘悠悠 发表于 2015-4-21 21:05:56

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

柔情似水 发表于 2015-5-2 00:48:47

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

变相怪杰 发表于 2015-6-13 21:03:47

是一种语言,用以产生「小应用程序(Applet(s))

不帅 发表于 2015-6-19 05:24:17

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
页: [1] 2
查看完整版本: JAVA网页设计Struts的静态表单的使用