zoukankan      html  css  js  c++  java
  • 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=“提交”>,并且也套在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>
  • 相关阅读:
    System.Web.Security下提供了非常简单的MD5加密算法,但处在非Web层的项目要怎么使用MD5加密呢?
    切换用户账户访问共享 记
    从盛大通行证上摘下来的身份证验证代码
    HA_Xenu1.3.6 使用手记
    asp.net跨域共享session(不能跨主机名)
    应用程序池自动关闭
    忘记 win2003 密码 记
    Ajax 入门 【学习手记】
    转载 防盗链
    超链接的 target
  • 原文地址:https://www.cnblogs.com/Stringair/p/6701841.html
Copyright © 2011-2022 走看看