首页 > 代码库 > JAVA EE 学习笔记[V5 struts2框架标签库]

JAVA EE 学习笔记[V5 struts2框架标签库]

Going on

  在上次我们浅试水Struts2框架之后只不过建立了一个轻型的Struts2项目,其中已经应用到了Struts2的一些标签:

  在JSP页面中引入标签库(使用@taglib命令):

<%@ taglib uri="/struts-tags" prefix="s" %> 

 

  其次是使用标签库:

<s:fielderror key="dataErr"></s:fielderror> 

 

  这个标签提供了错误信息的显示接口。

struts标签库简介

  struts标签为我们提供了一个便捷的JSP页面书写方式。

  每个标签包含了一定了逻辑。这样,使用struts标签可以尽量避免直接在JSP页面中使用java代码,从而使视图和控制器分离地更加清晰,使得页面更容易编写和维护。

  Struts标签大致分为三类:

    UI标签:用来生成User Interface(用户界面),包括HTML表单和非标单控件。

    控制标签:用来做条件处理,迭代,处理和显示数据。

    数据标签:用于输出action值栈中的数据,或者是将数据放入值栈。

按照惯例我们动手:(电脑重装上次的工程丢了=-=然后这次以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=http://www.mamicode.com/“提交”>,并且也套在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 class Locale extends ActionSupport{
   public String execute() 
   {
       return SUCCESS;
   }
}

 

用同样方法创建Employee

package com.yiibai.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends 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 void setAge(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框架标签库]