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>
时间: 2024-10-19 09:28:58

JAVA EE 学习笔记[V5 struts2框架标签库]的相关文章

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

JAVA EE 学习笔记[V4 Struts 2框架试水]

Going on 在有前面一些基础的时候可以把目光放向更远的地方了.Java EE 开发框架(刚开始接触有大佬告诉我这个是用来偷懒的,但既然存在,不可能只为偷懒)在一定程度上框架减轻了维护和开发压力,而Struts作为三大框架(还有Spring Hibernate)之一,也发展到了Struts2.要说起框架在Java EE开发过程中的地位,那如图: 若把Web应用看作是大楼,那框架则是每个房间单独的骨架,有了这个东西,建房写应用岂不美滋滋. 我在清楚的认识自己目前水平之后,理解和搞懂MVC模式下

[原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记42:带标签体的自定义标签

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记41:简单标签之带属性的自定义标签

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Java ee学习笔记

Servlet简介 Servlet技术规范是JavaEE技术规范中的一个重要组成部分,Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面(实际上,Servlet不仅仅是用于返回HTML的页面的,比如,Servlet还可以返回Xml,JSON等格式的字符串,当然了,也可以返回视频流,等等).Servlet要运行于Servlet容器上,目前,IBM的WebSphere,BEA的WebLogic,Apache的tomcat,SUN的GlassFish,这些Jav

struts2权威指南学习笔记:struts2引入自定义库

问题: 在jsp页面中添加了s:property标签,然而在页面始终未展示 解决: 经过搜索学习,发现只要添加语句 <%@ taglib prefix="s" uri="/struts-tags"%> 原因: @taglib表明引用标签.类似java中的import语句 prefix="s" 引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用<s:xxx/>就可以了 uri="/st

Android(java)学习笔记129:Tab标签的使用

1.案例1---TabProject (1)首先是main.xml文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_wid

JAVA EE 学习笔记[V3 JDBC连接数据库]

Going on 在前面两节实力浅学了Servlet和Jsp一波.然而这些东西离我们实际开发还有很远的距离(至少作业都完成不了=-=),所以想更进一步靠近实际开发的话,那就一定得对数据库的知识有一定程度的掌握和了解(这里暂时先来点简单的,毕竟数据库又是学科分支,分分钟搞大),我暂时对JAVA访问数据库的技术即JDBC进行学习和了解. JDBC简介 商业应用的后台数据一般存放在数据库中,很明显,可以通过 Java 代码来访问数据库. 在 Java 技术系列中,访问数据库的技术叫做 JDBC(Jav