按照惯例我们动手:(电脑重装上次的工程丢了 =-= 然后这次以 Myeclipse 10.0 为例)
首先来点 UI 标签的应用:
- <%@ page language="java" pageEncoding="UTF-8" %>
- <%@ taglib uri="/struts-tags" prefix="s" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>
- 登录页面
- </title>
- </head>
- <body>
- <s:form action="login.action" method="post">
- <s:fielderror key="dataErr">
- </s:fielderror>
- <s:textfield name="user.username" key="用户名">
- </s:textfield>
- <s:password name="user.password" key="密码">
- </s:password>
- <br/>
- <s:submit value="提交">
- </s:submit>
- <s:reset value="重置">
- </s:reset>
- </s:form>
- </body>
- </html>
这个是上次 login.jsp 里面的内容,我改成这样子
按下 F12 之后我们发现一些新东西:
没错。在 jsp 里面的 s:from 变成了 <from></from> 表单不说,而且还多了一个 <table class="wwFormTable"></table>
Login.jsp 源码中 <s:textfield name="user.username"key=" 用户名 "></s:textfield> 标签,变成了如下一大段代码:
- <tr>
- <td class="tdLabel">
- <label for="login_user_username" class="label">
- 用户名:
- </label>
- </td>
- <td>
- <input type="text" name="user.username" value="" id="login_user_username">
- </td>
- </tr>
可怕 =-=
同样的: Login.jsp 源码中 <s:submit> 标签,在浏览器端变成了 <input type="submit"id="login_0"value=" 提交 ">,并且也套在 table 中。
Login.jsp 源码中 <s:password name="user.password"key=" 密码 "></s:password> 标签,变成了如下一大段代码:
- <tr>
- <td class="tdLabel">
- <label for="login_user_password" class="label">
- 密码:
- </label>
- </td>
- <td>
- <input type="password" name="user.password" id="login_user_password">
- </td>
- </tr>
可以看出来,struts 的标签,一个包含 HTML、CSS 和 JSP 逻辑在内的组件。用户通过指定标签属性来调用该组件。可以快速地搭建页面。 Struts 标签的设计,深刻地影响了许多其他 web 开发框架(例如 angular, angular2, polymer 等等。 )。这种方式又称为 web 组件(web components)式开发。在大公司项目中,使用 web 组件将强化代码结构的规范性,效果的统一性,与代码的重用性。有些大公司还根据自己的需要,制作自己的标准组件库。例如雅虎的 dojo 系列等等。
而这意味着我可以创建一个新的 CSS 文件在整个工程当中,而通过标签来改变整个布局。(不用把 css 写到 jsp 里美滋滋)
而在 JSP 里面要使用这些,得需要工程默认的一些东西:
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <link rel="stylesheet" href="<%=basePath%>/xxx.css" type="text/css"/>
通过 struts2 标签实现 i18n
软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
国际化 (internationalization) 又称为 i18n,据说是因为 internationalization 这个单词从 i 到 n 之间有 18 个英文字母,i18n 的名字由此而来。
对于程序中固定使用的文本元素,例如菜单栏、导航条等使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务(这需要配套的资源文件)。 对于程序动态产生的数据,例如日期,货币等,软件应能根据当前所在的国家或地区的文化习惯进行显示(这需要相应的格式转换)。
(页面多语言转换岂不美滋滋)
Struts2 的资源文件通常命名为如下格式:
bundlename_language_country.properties 其中,bundlename 是类名,language 是语言类型,country 是国家名。
类名有如下几种,分别对应不同的位置,以便进行语言翻译工作:
ActionClass.properties
Interface.properties
SuperClass.properties
model.properties
package.properties
struts.properties
global.properties
多语言开发应用程序,就必须保持相应的到那些语言 / 区域设置多个属性文件定义的键 / 值对中的所有内容。
例如,如果要开发应用程序(默认)为美国英语,西班牙语,和法语就必须创建三个属性文件。
global.properties: 默认情况下,英语(美国)将被应用
global_fr.properties: 这将是法语环境中使用。
global_es.properties: 这将被用于西班牙语言环境。
那试试?
说走就走:
先创建一个 web service project,应用 struts2 框架。
然后再 SRC 下创建:
(记得用 UTF-8 保存中文)
创建 index.jsp,我们通过 struts2 标签来访问:
- <%@ page language="java" contentType="text/html; charset=UTF-8" %>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <title>
- Employee Form with Multilingual Support
- </title>
- </head>
- <body>
- <h1>
- <s:text name="global.heading" />
- </h1>
- <s:url id="indexEN" namespace="/" action="locale">
- <s:param name="request_locale">
- en
- </s:param>
- </s:url>
- <s:url id="indexCN" namespace="/" action="locale">
- <s:param name="request_locale">
- cn
- </s:param>
- </s:url>
- <s:a href="%{indexEN}">
- English
- </s:a>
- <s:a href="%{indexCN}">
- 简体中文
- </s:a>
- <s:form action="empinfo" method="post" namespace="/">
- <s:textfield name="name" key="global.name" size="20" />
- <s:textfield name="age" key="global.age" size="20" />
- <s:submit name="submit" key="global.submit" />
- </s:form>
- </body>
- </html>
再创建一个 success.jsp 用来返回确定成功的值:
- <%@ page language="java" contentType="text/html; charset=UTF-8" %>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <title>
- Success
- </title>
- </head>
- <body>
- <s:property value="getText('global.success')" />
- </body>
- </html>
创建动作:
- package com.yiibai.struts2;
- import com.opensymphony.xwork2.ActionSupport;
- public classLocaleextends ActionSupport{
- public String execute()
- {
- return SUCCESS;
- }
- }
用同样方法创建 Employee
- package com.yiibai.struts2;
- import com.opensymphony.xwork2.ActionSupport;
- public classEmployeeextends ActionSupport{
- private String name;
- private int age;
- public String execute()
- {
- return SUCCESS;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public voidsetAge(int age) {
- this.age = age;
- }
- }
在 struts.xml 下做这样一个设置:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <constant name="struts.custom.i18n.resources" value="global" />
- <package name="helloworld" extends="struts-default" namespace="/">
- <action name="empinfo"
- class="com.yiibai.struts2.Employee"
- method="execute">
- <result name="input">/index.jsp</result>
- <result name="success">/success.jsp</result>
- </action>
- <action name="locale"
- class="com.yiibai.struts2.Locale"
- method="execute">
- <result name="success">/index.jsp</result>
- </action>
- </package>
- </struts>
JAVA EE 学习笔记 [V5 struts2 框架标签库]
来源: http://www.bubuko.com/infodetail-2022412.html