支柱,一个Web应用程序框架,可以帮助开发人员获得的Java网络应用程序和使用运行模型 - 视图 - 控制器体系结构,可帮助确保应用清晰,直接,且易于维护。这很容易开始使用Struts的Tomcat上,但一旦你在那里,都有些什么东西整齐的Struts可以做什么?可最支柱的重要组成部分,是它的标签系统。
Struts标签可以让你控制页面输出,交互数据,信息呈现给用户,并从他们那里得到信息反馈。有两种类型的Struts标签:通用标签,控制页面流以及与数据交互和UI标签,其覆盖用户交互。本文重点介绍的通用标签;本周晚些时候,我们将看看UI标签。我认为,在我们的入门文章,你就服你的Struts通过Tomcat的应用程式;如果没有,更改部署细节,以适应您的设置。
控制标签
标签是标记的小片段,让您轻松地将Struts的指令到HTML或JSP页面。随着通用代码,指令控制页面执行和呈现,并处理数据的提取,创建和操作流程。这里有一对夫妇如何使用控制标签的例子。
一个的if / else if / else语句控制结构是非常有用,当你建立一个web应用程序;你希望能够根据什么值被设置为显示不同的东西给用户。下面显示的代码不同的文本串取决于的值myDecade
变量。
存放在$ CATALINA_HOME / webapps /下mystruts此if.jsp文件:
<%@页面的contentType = “text / html的” 的pageEncoding = “UTF-8” %> <%@标签库URI = “http://www.openlogic.com/struts-tags” 前缀= “S” %> HEAD> 如果,否则,和ELSEIF标记 H1> 20世纪90年代的儿童。值: S:如果> 你千年,你。值是: S:ELSEIF> 邦最新的?值是: S:其他> BODY> HTML>
就在JSP文件的顶部,我们成立了以Struts标签的位置标签库
线,并指出任何Struts标签将前面(识别)与小号
。
正如我们在这里做,你会使用发现自己组
和属性
标签经常连同其他一般或UI标签。这里我们设置了一个名为变量myDecade
,并自动调用getDecade()
相关动作类来获取它的价值。如果标签代替了值= “foo” 的
,然后将它设置为返回的值的getFoo()
。
然后,我们使用如果
标签测试的值myDecade
。该如果
标签有一个参数:测试
,其确定所述标签的本体将被显示。在Struts 2,%{} FOO
符号是一个标记,该括号内的内容(FOO
)应该被评估为OGNL陈述,而不是作为一个字符串。在这里,这种说法是#myDecade == '1990' 的
,其比较myDecade
具有值“1990”对象如果这个(如果它们匹配即)返回true,的身体如果
标签显示。否则,我们移动到ELSEIF
标签,该标签完全相同的方式工作。如果这也返回false,那么我们通过掉在其他
如果达到了标签,它没有试验等会自动为真。
接下来,我们需要建立相关联的动作类,WEB-INF / SRC /示例/ IfDecade.java,这是一个简单的类只有一个变量及其getter / setter方法。这十年价值在这里硬编码向您展示如何工作的;在现实生活中你很可能从用户那里得到它,我会告诉你怎么做,在本系列的下一篇文章。这里的IfDecade.java:
打包例子;进口com.opensymphony.xwork2.ActionSupport;公共类IfDecade延伸ActionSupport的{私人字符串十年=“1990”;公共字符串的execute(){返回成功;}公共字符串getDecade(){回归十年;}公共无效setDecade(字符串十年){this.decade =十年;}}
最后,WEB-INF /班/ struts.xml的链接上面的文件:
<支柱> <包名称= “默认” 的延伸= “支柱默认”> <动作名称= “ifDecadeAction” 类= “example.IfDecade”> <结果名称= “成功”> / if.jsp 导致> 动作> 打包> 支柱>
要编译此,键入:
CD WEB-INF的javac -cp LIB / XWork的核 - 2.3.4.1.jar -d类的src /示例/ IfDecade.java
重新启动Tomcat,并期待在http://本地主机:8080 / mystruts / ifDecadeAction.action看,如果/ ELSEIF /其他行动代码:
迭代器标签
迭代器标签是用于数据控制的另一个有用的一个。它可以让你遍历列表或收藏价值的,并根据你的当前值输出不同的值。为了尝试一下,添加在WEB_INF / src目录/例子/ IteratorDecade.java这个Java文件;这将创建一个列表,它的getter和setter方法:
打包例子;进口com.opensymphony.xwork2.ActionSupport;进口的java.util.ArrayList;进口的java.util.List;公共类IteratorDecade扩展了ActionSupport {私有列表十年;公共字符串的execute(){十年=新的ArrayList();decades.add( “1950”);decades.add( “1960”);decades.add( “1970”);decades.add( “1980”); decades.add("1990s"); decades.add("2000s"); decades.add("2010s"); return SUCCESS; } public List getDecades() { return decades; } public void setDecades(List decades) { this.decades = decades; } }
现在创建iterator.jsp来控制显示:
<%@页面的contentType = “text / html的” 的pageEncoding = “UTF-8” %> <%@标签库URI = “http://www.openlogic.com/struts-tags” 前缀= “S” %> HEAD> 迭代 H1> -
LI> s的:迭代> UL> -
(无更多数十年但在此之后) li> S:如果> <!S:其他> -
li> S:其他> S:迭代器> OL> BODY> HTML>
不像我们,如果/ ELSEIF /其他例子,这次我们并不需要先设置的值。取而代之的是,我们在直接设置它迭代器
标签,其中值=“十年”
在返回的列表生成一个迭代器getDecades()
在相关的类。如前所述,如果迭代器有值= “foo” 的
,它会使用返回的列表的getFoo()
。这里有两个例子。在第一个迭代器实例,而迭代器仍具有值返回,每一个是输出由属性
标签。这仅仅是指堆栈,在这里是由迭代器返回的最新值在最近的值。
第二迭代器实例添加一个状态值。这产生了IteratorStatus对象,然后可将其用于测试各种性能。在这里,持续()
如果我们迭代器的最后一个成员在IteratorStatus对象的方法来输出不同的东西。其他可用IteratorStatus方法包括:第一()
,奇()
和甚至()
。
要链接的两个文件,添加在struts.xml中这三行:
<动作名称= “iteratorDecadeAction” 类= “example.IteratorDecade”> <结果名称= “成功”> / iterator.jsp 导致> 动作>
编译如上,重新启动Tomcat,并访问http://本地主机:8080 / mystruts / iteratorDecadeAction看到它的工作:
其他通用控制标记显示Struts的标签参考页。它们包括合并,比较和处理列表的其他方式,但他们以类似的方式,以两个例子都工作中,我们已经看到了。
数据标记
另一种类型的通用代码是那些与数据的工作。一个这样的标签是网址标记。简单地说,它看起来像这样:
”目标= “_空白”>谷歌
这就造成在http://www.google.com指向的URL。在这种情况下,显然没有太大的价值了硬编码这一点,但URL标签也可以用于Struts动作,可以设置为变量,可以parametized。例如,你可以尝试加入这行来,你前面一节中创建的文件if.jsp:
2000 秒:PARAM> 秒:URL> ”>设置十年(通过特性)
刷新与HTTP页面://本地主机:8080 / mystruts / ifDecadeAction.action,然后点击“设置的十年”的链接。你会看到与十年设置页面重新加载至2000年(更复杂的方法是使用一个下拉菜单或类似工具选择十年,我们来看看表单控件在本系列文章的第二部分。)
在这里,URL被预先设置好,有一个动作,一个变量名(ifUrlTag
),以及一个参数传递。更多关于在某一时刻的参数,但是这将创建一个URL /mystruts/ifDecadeAction.action?decade=2000。这是从根上下文构造(/ mystruts /),则行动
值(ifDecadeAction.action
;ifDecadeAction
也会做同样的事情),以及十
值。所以点击这个通行证年代= 2000
到IfDecade.setDecade()和oututs经由if.jsp页的结果,作为设定上述struts.xml中。
我们已经讨论过的组
和属性
标签。为了避免混淆,请记住,组
用于设定仅在JSP的特定值;它不调用任何setFoo()
方法在操作类。
最后,你会发现PARAM
标记是有用的。它parametizes其他标签,这样你就可以在其它标签内使用它提供的一个特定的值。在上面的例子之一,我们有:
2000 秒:PARAM> S:URL>
这里,PARAM
通年代= 2000
参数到URL成立了由网址
标签。你可以实现与同样的事情:
秒:PARAM> S:URL>
使用标记的两种方式是完全等价的。
多个数据标记:豆
实例化一个JavaBean类,国际化
允许您访问多个资源包和文本
呈现i18n关联的资源信息。您也可以使用推
标签更改什么是堆栈的顶部,使之更快地访问特定的bean或值。欲了解更多标签和详细信息,请参阅Struts的通用标签参考页。欲了解更多关于UI标签,看这个空间,这个由两部分组成的系列的第二部分。