(三)Struts1.x高级应用

本文介绍 Struts1.x 中的国际化应用、动态 FormBean 的配置及使用方法,同时涵盖 DispatchAction 的工作原理和异常处理机制。

一、国际化

1、什么是国际化

按照我个人的理解,国际化就是根据客户端的语言环境显示不同的语言。也就是服务器根据客户端提交过来的语言环境返回不同的内容(客户端语言环境会在请求头“Accept-Language”中提交过来)。

2、Strut1.x国际化的使用

(1)、提供不同的资源包

资源包的命名格式:包名_语言简写_国家简写.properties(如:languang_zh_CN.properties),资源包内的内容还是key=value的形式,每个资源包的包名和key都一样,就语言这一块会不同,还有value则不同的语言的value,结构和代码如下所示:
这里写图片描述

如果资源包不能适配客户端提交过来的语言环境,则默认显示包名.properties(此处是language.properties),几个包的代码分别如下:

- language.properties:

account=default_account

- language_en_US.properties

account=en_account

- language_zh_CN.properties

account=zh_account

接下来,要在struts的配置文件将资源包配进去,代码如下:

这里写图片描述

为了使用不同的资源包,需要设置key选项(不设key的就是默认选项,都不设key就只能使用最后一项),key对应jsp页面标签中的bundle,jsp页面代码如下:

<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<html>
<head>
    <title>language</title>
</head>
<body>
<html:messages id="account" message="true" bundle="language">
    <bean:write name="account"></bean:write>
</html:messages>
</body>
</html>

接下来配合Action里的代码,讲述jsp相关属性与Action代码相关属性的关系:

public class LanguageAction extends Action {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ActionMessage message = new ActionMessage("account");
        ActionMessages messages = new ActionMessages();
        messages.add("message", message);
        this.addMessages(request, messages);

        return mapping.findForward("language");
    }
}

jsp页面中,“html:messages”标签中的bundle属性对应之前配置文件中的key,指使用哪个资源包。id属性指使用资源文件中那个key的值,与ActionMessage构造函数中的key属性一致。

二、动态FormBean

1、什么是动态FormBean

动态FormBean,说白了就是在strut配置文件中配置FormBean。众所周知,FormBean是用来封装客户端提交过来的数据的,前几篇blog中都是用一个FormBean类来接收用户数据,而动态FormBean则是一个可配置的FormBean,极大地方便了代码编写。

2、Strut1.x中如何使用动态FormBean

在Struts1.x的核心包中有org.apache.struts.action.DynaActionForm(不可校验,org.apache.struts.validator.DynaValidatorForm则可校验),我们配置FormBean时就需要在配置文件的“form-bean”标签中配入DynaActionForm,然后在它的子标签下配入各种属性,代码如下:

<form-beans>
        <form-bean name="showForm" type="org.apache.struts.action.DynaActionForm">
            <form-property name="name" type="java.lang.String"></form-property>
            <form-property name="age" type="java.lang.Integer"></form-property>
        </form-bean>
    </form-beans>

接下来在Action中直接调用即可,调用代码如下:

public class ShowAction extends DispatchAction{
    public ActionForward showUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        DynaActionForm deform = (DynaActionForm) form;
        System.out.println(deform.get("name"));

        ActionMessages messages = new ActionMessages();
        ActionMessage message = new ActionMessage("age", deform.get("age"));
        messages.add("message", message);
        this.addMessages(request, messages);

        return mapping.findForward("success");
    }
}

前端页面之前通过“html:messages”和“bean:write”标签获取即可。不过在这里有个困扰了我很久的问题,就是总提示在默认的bundle找不到age,原因是“html:messages”没有设置bundle选项,导致系统从默认的资源文件查找。所以我们还要通过bundle指定一个包含“age”键的资源文件。

三、DispatchAction

可能有人已经发现了Action的缺点,Action只有execute一个执行方法,要是需要增删改查操作不就要写4个Action了吗?不符合历史发展规律啊。这时DispatchAction就应运而生了,通过继承它我们可以在Action中写多个方法,就像上述代码一样,执行的方法不是execute了吧,接下来我们从访问和配置这两方面讲述它的使用。

说多无益,先贴配置代码:

<action path="/show" type="com.struts.action.ShowAction" name="showForm" parameter="method">
            <forward name="success" path="/show.jsp"></forward>
            <forward name="fail" path="/login.jsp"></forward>
        </action>

很明显的区别,这个配置“action”标签中多了一个parameter属性,这个属性有什么用呢?很简单,我们从前端请求过来肯定要指定调用哪个方法的,而怎么获取请求参数呢?答案就是通过parameter属性,parameter属性的值正是前端提交的请求参数的键。好像说得有点懵了,举个栗子:上面代码parameter=“method”,所以前端请求就要有一个名为method的参数指定访问某个方法,此处的请求URL是“http://localhost/show?method=showUsers”,就指定了我要访问showUsers这个方法。so easy~

四、异常处理

异常处理就是当程序产生exception时需要进行的代码执行。接下来说一下全局异常的使用步骤:

  • 1、编写异常处理类,需要继承ExceptionHandler
package com.struts.exceptionHandler;

import org.apache.struts.action.*;
import org.apache.struts.config.ExceptionConfig;
import org.apache.struts.util.ModuleException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by 程序猿 on 2017/5/17 0017.
 */
public class ShowExceptionHandler extends ExceptionHandler {
    @Override
    public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException {
        ActionMessage message = new ActionMessage("exception");
        ActionForward forward = mapping.getInputForward();

        this.storeException(request,"exception" ,message, forward, ae.getScope());
        return mapping.getInputForward();
    }
}
  • 2、在struts配置文件中配置
<global-exceptions>
        <exception key="exception"
                   type="java.lang.ArithmeticException"
                   handler="com.struts.exceptionHandler.ShowExceptionHandler"
        />
    </global-exceptions>

接下来,如果发生ArithmeticException异常,就会跳转到input属性的页面,在前端页面通过“html:errors”标签显示出来了。

【CNN-GRU-Attention】基于卷积神经网络和门控循环单元网络结合注意力机制的多变量回归预测研究(Matlab代码实现)内容概要:本文介绍了基于卷积神经网络(CNN)、门控循环单元网络(GRU)与注意力机制(Attention)相结合的多变量回归预测模型研究,重点利用Matlab实现该深度学习模型的构建与仿真。该模型通过CNN提取输入数据的局部特征,利用GRU捕捉时间序列的长期依赖关系,并引入注意力机制增强关键时间步的权重,从而提升多变量时间序列回归预测的精度与鲁棒性。文中涵盖了模型架构设计、训练流程、参数调优及实际案例验证,适用于复杂非线性系统的预测任务。; 适合人群:具备一定机器学习与深度学习基础,熟悉Matlab编程环境,从事科研或工程应用的研究生、科研人员及算法工程师,尤其适合关注时间序列预测、能源预测、智能优化等方向的技术人员。; 使用场景及目标:①应用于风电功率预测、负荷预测、交通流量预测等多变量时间序列回归任务;②帮助读者掌握CNN-GRU-Attention混合模型的设计思路与Matlab实现方法;③为学术研究、毕业论文或项目开发提供可复现的代码参考和技术支持。; 阅读建议:建议读者结合Matlab代码逐模块理解模型实现细节,重点关注数据预处理、网络结构搭建与注意力机制的嵌入方式,并通过调整超参数和更换数据集进行实验验证,以深化对模型性能影响因素的理解。
下载前必看:https://pan.quark.cn/s/da7147b0e738 《商品采购管理系统详解》商品采购管理系统是一款依托数据库技术,为中小企业量身定制的高效且易于操作的应用软件。 该系统借助VC++编程语言完成开发,致力于改进采购流程,增强企业管理效能,尤其适合初学者开展学习与实践活动。 在此之后,我们将详细剖析该系统的各项核心功能及其实现机制。 1. **VC++ 开发环境**: VC++是微软公司推出的集成开发平台,支持C++编程,具备卓越的Windows应用程序开发性能。 在该系统中,VC++作为核心编程语言,负责实现用户界面、业务逻辑以及数据处理等关键功能。 2. **数据库基础**: 商品采购管理系统的核心在于数据库管理,常用的如SQL Server或MySQL等数据库系统。 数据库用于保存商品信息、供应商资料、采购订单等核心数据。 借助SQL(结构化查询语言)进行数据的增加、删除、修改和查询操作,确保信息的精确性和即时性。 3. **商品管理**: 系统内含商品信息管理模块,涵盖商品名称、规格、价格、库存等关键字段。 借助界面,用户能够便捷地录入、调整和查询商品信息,实现库存的动态调控。 4. **供应商管理**: 供应商信息在采购环节中占据重要地位,系统提供供应商注册、联系方式记录、信用评价等功能,助力企业构建稳固的供应链体系。 5. **采购订单管理**: 采购订单是采购流程的关键环节,系统支持订单的生成、审批、执行和追踪。 通过自动化处理,减少人为失误,提升工作效率。 6. **报表与分析**: 系统具备数据分析能力,能够生成采购报表、库存报表等,帮助企业掌握采购成本、库存周转率等关键数据,为决策提供支持。 7. **用户界面设计**: 依托VC++的MF...
【DC-AC】使用了H桥MOSFET进行开关,电感器作为滤波器,R和C作为负载目标是产生150V的双极输出和4安培(双极)的电流(Simulink仿真实现)内容概要:本文档围绕一个基于Simulink的电力电子系统仿真项目展开,重点介绍了一种采用H桥MOSFET进行开关操作的DC-AC逆变电路设计,结合电感器作为滤波元件,R和C构成负载,旨在实现150V双极性输出电压和4A双极性电流的仿真目标。文中详细描述了系统结构、关键器件选型及控制策略,展示了通过Simulink平台完成建模与仿真的全过程,并强调了参数调整与波形分析的重要性,以确保输出符合设计要求。此外,文档还提及该仿真模型在电力变换、新能源并网等领域的应用潜力。; 适合人群:具备电力电子基础知识和Simulink仿真经验的高校学生、科研人员及从事电力系统、新能源技术等相关领域的工程技术人员;熟悉电路拓扑与基本控制理论的初级至中级研究人员。; 使用场景及目标:①用于教学演示H桥逆变器的工作原理与滤波设计;②支撑科研项目中对双极性电源系统的性能验证;③为实际工程中DC-AC转换器的设计与优化提供仿真依据和技术参考;④帮助理解MOSFET开关行为、LC滤波机制及负载响应特性。; 阅读建议:建议读者结合Simulink模型文件同步操作,重点关注H桥驱动信号生成、电感电容参数选取及输出波形的傅里叶分析,建议在仿真过程中逐步调试开关频率与占空比,观察其对输出电压电流的影响,以深化对逆变系统动态特性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值