标记取Struts的超越基础

支柱,一个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” %>     

如果,否则,和ELSEIF标记 20世纪90年代的儿童。值: 你千年,你。值是: 邦最新的?值是:

就在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 /其他行动代码:

ifelse调整600

迭代器标签

迭代器标签是用于数据控制的另一个有用的一个。它可以让你遍历列表或收藏价值的,并根据你的当前值输出不同的值。为了尝试一下,添加在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” %>     

迭代
    1. (无更多数十年但在此之后) <!S:其他>

不像我们,如果/ ELSEIF /其他例子,这次我们并不需要先设置的值。取而代之的是,我们在直接设置它迭代器标签,其中值=“十年”在返回的列表生成一个迭代器getDecades()在相关的类。如前所述,如果迭代器有值= “foo” 的,它会使用返回的列表的getFoo()。这里有两个例子。在第一个迭代器实例,而迭代器仍具有值返回,每一个是输出由属性标签。这仅仅是指堆栈,在这里是由迭代器返回的最新值在最近的值。

第二迭代器实例添加一个状态值。这产生了IteratorStatus对象,然后可将其用于测试各种性能。在这里,持续()如果我们迭代器的最后一个成员在IteratorStatus对象的方法来输出不同的东西。其他可用IteratorStatus方法包括:第一()奇()甚至()

要链接的两个文件,添加在struts.xml中这三行:

<动作名称= “iteratorDecadeAction” 类= “example.IteratorDecade”> <结果名称= “成功”> / iterator.jsp  

编译如上,重新启动Tomcat,并访问http://本地主机:8080 / mystruts / iteratorDecadeAction看到它的工作:

迭代器大小600

其他通用控制标记显示Struts的标签参考页。它们包括合并,比较和处理列表的其他方式,但他们以类似的方式,以两个例子都工作中,我们已经看到了。

数据标记

另一种类型的通用代码是那些与数据的工作。一个这样的标签是网址标记。简单地说,它看起来像这样:

”目标= “_空白”>谷歌

这就造成在http://www.google.com指向的URL。在这种情况下,显然没有太大的价值了硬编码这一点,但URL标签也可以用于Struts动作,可以设置为变量,可以parametized。例如,你可以尝试加入这行来,你前面一节中创建的文件if.jsp:

  2000   ”>设置十年(通过特性)

刷新与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年代= 2000参数到URL成立了由网址标签。你可以实现与同样的事情:

   

使用标记的两种方式是完全等价的。

多个数据标记:实例化一个JavaBean类,国际化允许您访问多个资源包和文本呈现i18n关联的资源信息。您也可以使用标签更改什么是堆栈的顶部,使之更快地访问特定的bean或值。欲了解更多标签和详细信息,请参阅Struts的通用标签参考页。欲了解更多关于UI标签,看这个空间,这个由两部分组成的系列的第二部分。

加入对网络世界的社有个足球雷竞技app区Facebook的LinkedIn对那些顶级心态的话题发表评论。

版权所有©2012Raybet2

IT薪资调查:结果是