该支柱Web应用程序框架,可以很容易地建立使用模型 - 视图 - 控制器架构的Java Web应用程序。上次我们介绍Struts标签,这让你控制页面输出,交互数据,信息呈现给用户,并从他们那里得到信息反馈。在这篇文章中,我们专注于通用标签;这个时候,我们看一下用户界面的标签,这使得它能够轻松地创建与Java代码无缝集成的形式和用户体验。
UI标签让开发者显示在一个网页,并钩用户输入到后端数据。一些Struts的UI标签创建HTML标记,并允许您将其挂接到轻松你的代码。其他标签给你更多的有用的选项,如显示错误消息,我们将看到一个时刻的能力。Struts的UI标签有是JSP,Velocity和FreeMarker也特别好支持,但应与几乎任何共同语言兼容。下面的示例使用JSP。
请记住关于Struts UI标签三个重要的,但相关的概念:
- 标签是一小片JSP,FreeMarker的,或速度显示用代码中的代码运行的。
- 模板是一段代码,通过一定的HTML标记生成。模板控制的HTML标签输出。所有默认的模板是FreeMarker的,并且是大多数用途的罚款。如果你需要,你可以提取的struts-core.jar添加和编辑它们的默认模板。
- 主题是打包在一起的模板的集合。主题可以延长,因为我们拭目以待。
在本教程中,我们重点关注的标签,为默认模板和主题是适合大多数的目的。欲了解更多关于主题和模板,请参阅Struts的文档入住或退房手续延长自己的主题基本选项。
主要有三种类型的UI标签:表单标签,非表单标签和AJAX的标签。如果你想使用其中的任何视图页面上,你需要有一个标签库指令。我们已经看到了这一点,在通用标签部分显示网页:
<%@标签库前缀= “S” URI = “http://www.openlogic.com/struts-tags” %>
这两个点在描述Struts标签的文件,并指定所有的Struts标签带有前缀“S”。如果你有兴趣在读取标签TLD文件,它在Struts 2的核心JAR的META-INF文件夹中。
表单标签
这里的form.jsp,即使用Struts UI表单标签基本输入形式:
<%@标签库URI = “http://www.openlogic.com/struts-tags” 前缀= “S” %> 鸡蛋和火腿表格 TITLE> HEAD> 鸡蛋和火腿表格 b>
s的:形式> BODY> HTML>
这里的第一个重要的线是S:形式
标签,该标签指定表单动作;我们将用一流的,当我们在struts.xml编辑此挂钩起来。第二个是S:收音机
线。这指定了一个人类可读的标签旁边的单选按钮被示出;然后一个名称,列表和值,所有这些均从相关联的类检索如下:
yourEggsAndHam
-getYourEggsAndHam()
YESNO
-getYesno()
defaultEggsAndHamValue
-getDefaultEggsAndHamValue()
我们还需要一个结果页面,radioresult.jsp:
<%@标签库前缀= “S” URI = “http://www.openlogic.com/struts-tags” %> 的Struts 2的单选按钮示例 H1> 待办事项你喜欢绿色鸡蛋和火腿?: H4> BODY> HTML>
该S:财产
标签调用getYourEggsAndHam()
摆脱形式返回的结果。(看到在以前的文章在这个系列欲了解更多的属性标记。)
接下来,RadioButton.java文件提供后端代码:
打包例子;进口的java.util.ArrayList;进口的java.util.List;进口com.opensymphony.xwork2.ActionSupport;公共类单选按钮扩展了ActionSupport {私有列表YESNO;私人字符串yourEggsAndHam;私有静态最后弦乐YES =“是”;私有静态最后弦乐NO =“无”;私有静态最后弦乐UNKNOWN =“未知”;公共单选按钮(){YESNO =新的ArrayList(); yesno.add(YES); yesno.add(NO); yesno.add(UNKNOWN); } public String execute() { return SUCCESS; } public String display() { return NONE; } public String getDefaultEggsAndHamValue(){ return UNKNOWN; } // getters and setters public List getYesno() { return yesno; } public void setYesno(List yesno) { this.yesno = yesno; } public String getYourEggsAndHam() { return yourEggsAndHam; } public void setYourEggsAndHam(String yourEggsAndHam) { this.yourEggsAndHam = yourEggsAndHam; } }
在这里,我们已经创造了所有的get和set方法建立的单选按钮的选项都列表,以及存储和访问用户输入的实际值。最后,在struts.xml中这些线连接在一起的Java和JSP文件:
<?XML版本= “1.0” 编码= “UTF-8”?> <!DOCTYPE支柱PUBLIC! “ - // Apache软件基金会// DTD struts配置2.0 // EN”“http://struts.apache.org/的DTD /支杆-2.0.dtd “> <支柱> <包名称=” 默认”的延伸= “支柱默认”> <动作名称= “radioButtonAction” 类= “example.RadioButton” 方法= “显示”> <结果名称= “无”> / form.jsp 导致> 动作> <动作名称= “resultAction” 类= “example.RadioButton”> <结果名称= “成功”> / radioresult.jsp 导致> 动作> 打包> 支柱>
编译RadioButton.java,重新启动Tomcat,并检查了HTTP://本地主机:8080 / mystruts / radioButtonAction.action。请注意,如果您尝试form.jsp直接加载,你会得到一个错误,因为RadioButton类必须首先调用创建YESNO
通过单选按钮使用的列表。
所有其他形式的标签可以用类似方法创建。例如,添加一个“名称”文本字段中,第一这个行添加到form.jsp:
现在添加这个变量和getter / setter方法RadioButton.java:
私人字符串YOURNAME;公共字符串getYourName(){返回YOURNAME;}公共无效setYourName(字符串YOURNAME){this.yourName = YOURNAME;}
并且这条线向radioresult.jsp,显示的名称输入:
喜!
重新编译,重新启动Tomcat,你的表格现在将与名称输入一个文本框加载。
欲了解更多有关的所有UI标签,包括其它形式的,看Struts的UI标签文档。
非表单标签
Struts还提供非表单标签,这给你其他的UI选项屈指可数。让我们快速浏览一下ActionMessage的
和actionerror
。在form.jsp(以上),添加此<风格>
在报头部分中:
<风格类型= “文本/ CSS”> .errors {背景色:#FF9933;边界:1px的固体#663300;宽度:400像素;边距:8像素;} .errors李{列表样式:无;} 样式>
还有这个如果
只是形式节开始前标签:
DIV> S:如果>
这就建立了一个CSS样式使用“错误”部分,则呈现actionerror
如果标签hasActionErrors()
返回true。你还需要改变表单动作的ValidateUser
。
现在来处理成功的消息。编辑radioresult.jsp看起来像这样:
<%@标签库前缀= “S” URI = “http://www.openlogic.com/struts-tags” %> <风格类型= “文本/ CSS”>。欢迎{背景色:#9933ff;边界:1px的固体#330099;宽度:200像素;}。欢迎李{列表样式:无;} 样式> HEAD> 鸡蛋和火腿结果 H1> DIV> S:如果> 你喜欢绿鸡蛋和火腿?: H4> BODY> HTML>
同样,我们已经设置了行动消息的CSS样式,如果有一个动作消息显示,我们显示它。
现在,我们需要一个方法添加到RadioButton.java:
公共无效的validate(){如果( “SamIAm” .equals(getYourName())){addActionMessage( “你好萨姆!”);}其他{addActionError( “你不是山姆!”);}}
验证()
被加载的形式时被自动调用。最后,链接这一切,加上另一个动作部分的struts.xml:
<动作名称= “的ValidateUser” 类= “example.RadioButton”> <结果名称= “成功”> / radioresult.jsp 结果> <结果名称= “输入”> / form.jsp 导致> 动作>
现在重新编译和访问http://本地主机:8080 / mystruts / validateUser.action。如果你把任何东西,但SamIAm到用户名框,你会得到一个错误信息。否则,你会得到一个紫色的“你好萨姆!”框在搜索结果页面的顶部。
一个问题需要注意的是,这是设置方式,验证()
被称为每次窗体加载,所以你总是得到“你不是山姆”的错误消息。为了解决这个问题,就需要rejig设置要经过一个JSP页面,而不是通过validateUser.action。目前,如果你直接去form.jsp,如上所述,你会得到一个错误消息,因为YESNO列表不会被填充。
其他非表单标签可用内容零件
,它允许你建立一个自定义UI组件;fielderror
,测试对于有效字段输入;和DIV
,这使得一个HTML div标签。支柱还支持使用Dojo插件使用AJAX选择标签。有关所有UI标签参考,请参阅Struts的文档。
版权所有©2012Raybet2