struts2官方 中文教程 系列七:消息资源文件

介绍

在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定)。消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字段标签,并根据用户的语言环境将文本更改为特定的语言。

贴个本帖的地址,以免被爬:struts2官方 中文教程 系列七:消息资源文件  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html

下载本章节代码

信息资源属性文件

在Struts2 web应用程序中,我们可以通过创建具有与Action类相同名称的属性文件(.properties )来将消息资源属性文件与每个Struts 2 Action类关联起来。这个属性文件必须与Action类在相同的包下。对于我们的教程示例,假设我们希望将label标签显示的内容放置到一个单独的文件中,在这个文件中我们可以轻松地更改它们,并提供在其他语言中显示的功能。

新建属性properties文件

Register.properties

personBean.firstName=First name
personBean.lastName=Last name
personBean.age=Age
personBean.email=Email
thankyou=Thank you for registering %{personBean.firstName}.

以上只是一个标准的Java属性文件。key左value右。当Register action 被执行时,试图页面通过key引用该资源文件。

Key Attribute

Register.properties的key属性可以在textfield标签中使用,以告诉struts2框架 name和label属性使用什么值。避免了直接提供这些属性的值。打开register.jsp

      <s:textfield name="personBean.firstName" label="First name" />

修改为

<s:textfield key="personBean.firstName"  />

key属性指示Struts 2框架textfield的name属性(<s:textfield name="...."/>)的值使用与key的值(即name="personbean.firstName")。对于label属性的值,Struts 2在register.properties中找到键(key)personBean.firstName,然后将对应的值赋予label属性。

为了使能经过Action的处理后在跳转到register.jsp而不是直接打开register.jsp,我们需要打开index.jsp,进行修改

<p><a href="register.jsp">Please register</a> for our prize drawing.</p>

修改为

<s:url action="registerInput" var="registerInputLink" />
<p><a href="${registerInputLink}">Please register</a> for our prize drawing.</p>

我们使用Struts2的url标签来创建一个到registerInput的链接。然后我们使用该链接作为a标签的href属性值,并且在struts.xml中定义registerInput。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <constant name="struts.devMode" value="true" />

    <package name="basicstruts2" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
        <!--hello-->
        <action name="hello" class="action.HelloWorldAction" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>

        <!-- register -->
        <action name="register" class="action.RegisterAction" method="execute">
            <result name="success">/thankyou.jsp</result>
            <result name="input">/register.jsp</result>
        </action>

        <!-- registerInput -->
        <action name="registerInput" class="action.RegisterAction" method="input" >
            <result name="input">/register.jsp</result>
        </action>
    </package>

</struts>

运行

官网话太多,我直接画张图来说明执行流程。

图片太小就把图片拖到另一个浏览器窗口查看原图。

我们也可以使用 struts2的text标签来访问资源文件,因为thankyou.jsp也是通过RegisterAction来处理渲染给用户的,所以在thankyou中也可以访问RegisterAction.properties资源文件,修改thankyou.jsp中h3标签

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Registration Successful</title>
  </head>
  <body>
    <h3><s:text name="thankyou" /></h3>

    <p>Your registration information: <s:property value="personBean" /> </p>

    <p><a href="<s:url action=‘index‘ />" >Return to home page</a>.</p>
  </body>
</html>

运行有同样的效果

%{personBean.firstName} 告诉Struts 2调用getPersonBean,该方法返回一个Person对象。然后调用该对象的getFirstName方法,该方法返回一个字符串(用户输入到form表单的值),用最后的结果来替换这个部分

Package Level Properties(包级别的属性

上面的方法中,我们的属性文件(/struts_basic/src/action/RegisterAction.properties)必须要与对应的Action类(/struts_basic/src/action/RegisterAction.java)同名才可使用,那么如何才能是所有Action都能使用同一个属性文件(.properties)呢?

新建一个名为:package.properties的文件src/action/ 下,那么该包下所有Action均可使用该属性文件

package.properties内容如下:

greeting=Welcome to The Wonderful World of Struts 2

为了测试,在HelloWorld.jsp中添加一个h1标签

运行如下

全局属性文件

当然我们也可以在struts.xml文件中定义一个全局的属性文件(Global Properties),这个属性文件可以被所有视图页面引用。

添加以下内容到名为 global.properties 的文件中,当然,文件名称不必要是global.properties

/src/global.properties

contact=For assistance contact <a href=‘mailto:[email protected]‘>[email protected]</a>
时间: 2024-10-25 10:34:38

struts2官方 中文教程 系列七:消息资源文件的相关文章

struts2官方 中文教程 系列十:Form标签

介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, form, textfield 控件和key属性.本教程将探索使用Struts 2 select, radio, checkbox, and checkboxlist form 控件 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://w

struts2官方 中文教程 系列十一:使用XML进行表单验证

在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让您可以内置到Struts 2框架的验证器. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列十一:使用XML进行表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6938720.html 下载本章节代码 为了使用户能够编辑存储在Person对

struts2官方 中文教程 系列九:Debugging Struts

介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截器.本文还讨论了如何设置日志级别以查看更多或更少的日志消息. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html 下载本章节代码 Configu

struts2官方 中文教程 系列八:异常处理

在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列八:异常处理  即 http://www.cnblogs.com/linghaoxinpian/p/6915066.html 下载本章节代码 全局异常处理(Global Exception Handling) 使用Struts 2框架,您可以

struts2官方 中文教程 系列十二:控制标签

介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项目:struts_basic2 本帖地址:struts2官方 中文教程 系列十二:控制标签 即 http://www.cnblogs.com/linghaoxinpian/p/6941683.html 下载本章节代码 struts2 if标签 我们在thankyou.jsp中添加如下代码: <s:i

Netty4.x中文教程系列(七)UDP协议

将近快一年时间没有更新Netty的博客.一方面原因是因为项目进度的问题.另外一方面是博主有一段时间去熟悉Unity3D引擎. 本章节主要记录博主自己Netty的UDP协议使用. 1. 构建UDP服务端 首先我们应该清楚UDP协议是一种无连接状态的协议.所以Netty框架区别于一般的有链接协议服务端启动程序(ServerBootstrap). Netty开发基于UDP协议的服务端需要使用Bootstrap 1 package dev.tinyz.game; 2 3 import io.netty.

Netty4.x中文教程系列(三) ChannelHandler

Netty4.x中文教程系列(四)  ChannelHandler 上一篇文章详细解释了Hello World示例的代码.里面涉及了一些Netty框架的基础. 这篇文章用以解释ChannelHandler.笔者本身在以前写过文章ChannelHandler改动及影响 和 ChannelInitializer 学习 对Netty的.ChannelHandler做过阐述.里面主要描述了4.x版本相对于3.x版本的改动以及影响.并引用了一些文章.为大家详细的解释了ChannelHandler里面涉及架

Netty4.x中文教程系列(四) 对象传输

Netty4.x中文教程系列(四)  对象传输 我们在使用netty的过程中肯定会遇到传输对象的情况,Netty4通过ObjectEncoder和ObjectDecoder来支持. 首先我们定义一个User对象,一定要实现Serializable接口: package mjorcen.netty.object; import java.io.Serializable; /** * User: hupeng Date: 14-6-3 Time: 上午1:31 */ public class Use

Netty4.x中文教程系列(六) 从头开始Bootstrap

Netty4.x中文教程系列(六) 从头开始Bootstrap 其实自从中文教程系列(五)一直不知道自己到底想些什么.加上忙着工作上出现了一些问题.本来想就这么放弃维护了.没想到有朋友和我说百度搜索推荐了我的文章.瞬间有点小激动啊.决定自己要把这个教程系列完善下去.这里诚挚的想支持我的盆友们道歉.真的是让你们失望了.我居然有想放弃的这种丧心病狂的念头.以后绝对不会了. 其实伴随着对Netty的逐步深入学习.感觉自己对netty的了解仍然有所欠缺.加上笔者语文课是美术老师教的.所以..说多了都是泪