首页 > 其他分享 >Struts2学习之类型转换

Struts2学习之类型转换

时间:2022-11-28 16:31:26浏览次数:44  
标签:类型转换 Map 学习 Struts2 Rectangle import com public rectangle


1:Struts2的类型转换默认的框架默默的帮助用户完成转换功能,主要用户输入的数据合理地转换为需要的属性的类型,Struts2框架就会在execute方法执行之前,替用户将参数转化为合理的类型

 

2:Struts2内建类型转换器

   int/Integer :  整数型

   short/Short:  短整数型

   long/Long:    长整型

   float: Float:    浮点型

   double/Double:   双精度型

   boolean/Boolean:   布尔型

   byte/Byte:    字节型

   char/Character:   字符型

    BigInteger:   大整数型

   Date:   日期类型

3:枚举类型

     定义一个枚举类型:

    

package com.capinfotech.model;

public enum ColorEnum {
red, blue, green;
}


定义相应的Action类:

package com.capinfotech.action;

import com.capinfotech.model.ColorEnum;
import com.opensymphony.xwork2.ActionSupport;

public class ConverterAction extends ActionSupport {

private ColorEnum color;

public ColorEnum getColor() {
return color;
}

public void setColor(ColorEnum color) {
this.color = color;
}

public String execute() throws Exception {

System.out.println("color=" + color);
System.out.println("您输入的颜色是红色吗?答案是:" + (color == color.red));

return SUCCESS;
}

}


struts.xml文件的配置信息


<action name="convert" class="com.capinfotech.action.ConverterAction">
<result name="success">/converter/success.jsp</result>
</action>



页面jsp为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>类型转换</title>
</head>
<body>
用户输入的颜色是:<s:property value="color"/>
</body>
</html>

在浏览器中输入信息,得到的信息如下图:


*数组和List

    Action类里面有两个属性

     private int heights[];

     private List<Integer> weights;

 在页面中需要添加时:

      <s:textfield name="heights" />

      <s:textfiled name="heights" />

      <s:textfield name="weights[0]" />

       <s:textfield name="weights[1]" />

  Action里面有个属性:

      private Rectangle[] rectangles;

   

   在页面中需要添加:

     <s:textfield name="rectangles[0].height" />     

     <s:textfield name="rectangles[0].weight" />  

     <s:textfield name="rectangles[1].height" /> 

      <s:textfield name="rectangles[1].weight" />

  在Action里面有个Map属性

    Map与数组及其类似,同样是用来存放多个单体数据,只不过数组用索引来区分不同的单体,而Map用Key来区分所有的单体。可以用"Map名['Key值']"这样的OGNL来

引用Map的值

 

   private Map<String, Rectangle> map;

 

   在页面上可以这样写:

    <s:textfield  name="map['first'].height" />

    <s:textfield  name="map['first'].weight" />

    <s:textfield  name="map['socond'].height"  />

    <s:textfield name="map['second'].weight" />

4:自定义类型转换器

     需要继承类StrutsTypeConverter类,在该抽象类中需要用户实现两个方法:

     

public abstract Object convertFromString(Map context, String[] values, Class toClass);

    *context: 转换上下文,可以在里面引用各种对象,比如:可以通过context.get(ValueStack.VALUE_STACK)来引用值栈。


    *values:用户输入的字符串

    * 需要被转换为的数据类型

public abstract String convertToString(Map context, Object o);

    * o:需要转换的对象


自定义的类型转换器为:

  

package com.capinfotech.util;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.capinfotech.model.Rectangle;
import com.opensymphony.xwork2.conversion.TypeConversionException;

public class RectangleConverter extends StrutsTypeConverter {

@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
//长方形向字符串转换
String userInput = values[0];
String[] arr = userInput.split(":");
//在真正的格式转换前,先把所有的用户输入可能的错误拦截住
if(arr != null && arr.length != 2) {
throw new TypeConversionException("请输入正确的长方形格式如:width:height");
}
try {
Rectangle rectangle = new Rectangle();
int width = Integer.parseInt(arr[0]);
int height = Integer.parseInt(arr[1]);

rectangle.setHeight(height);
rectangle.setWidth(width);

return rectangle;

} catch(RuntimeException e) {
throw new TypeConversionException("请输入正确的长方形格式如:width:height", e);
}
}

@Override
public String convertToString(Map context, Object o) {
Rectangle rectangle = (Rectangle)o;
return "长方形:宽:" + rectangle.getWidth() + ", 高:" + rectangle.getHeight();
}

}


Action的内容为:

package com.capinfotech.action;

import com.capinfotech.model.ColorEnum;
import com.capinfotech.model.Rectangle;
import com.opensymphony.xwork2.ActionSupport;

public class ConverterAction extends ActionSupport {

private Rectangle rectangle;

public Rectangle getRectangle() {
return rectangle;
}

public void setRectangle(Rectangle rectangle) {
this.rectangle = rectangle;
}

public String execute() throws Exception {

return SUCCESS;
}

}



提交页面为:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>类型转换</title>
</head>
<body>
<s:form action="/convert" method="post">
<s:textfield name="rectangle" label="输入长和高" />
<s:submit value="提交" />
</s:form>
</body>
</html>


成功页面为;

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>类型转换</title>
</head>
<body>
<s:property value="rectangle"/>
</body>
</html>

Struts2学习之类型转换_string


     




标签:类型转换,Map,学习,Struts2,Rectangle,import,com,public,rectangle
From: https://blog.51cto.com/woshisap/5891920

相关文章

  • vue2源码学习2vuex&vue-router
    1.vue插件编写插件可以实现对象vue的拓展,比如新增全局属性/方法,添加实例方法,使用mixin混入其他配置项等等。编写插件必须要实现install方法,当调用Vue.use()使用插件时,......
  • 时序数据增强 for 深度学习
    前言最近,深度学习在许多时间序列分析任务中表现出色。深度神经网络的优越性能严重依赖于大量训练数据以避免过度拟合。然而,许多现实世界时间序列应用的标记数据可能受到限......
  • 费曼学习法
    概述费曼学习法,我很喜欢的一个学习方法,简单来说,就是:通过向别人清楚的解说某一件事或是写一篇浅显易懂的教程文章,来确认自己是否真正弄懂了这件事。可以说是在通过向别讲......
  • 提高学习效率的策略
    推荐一本关于学习方法的书《认知天性》,里面有讲到有一些简单实用的学习策略,能让大家学的更好、记得更牢,而且这些策略人人可用,时时可用。这些方法包括各种形式的检索练习—......
  • linux--kvm初步学习
    检查机器是否开启虚拟化支持[root@kvm~]#egrep-o'vmx|svm'/proc/cpuinfosvmsvmsvmsvm安装kvm依赖包yuminstalllibvirtvirt-installqemu-kvm-y开机自启......
  • .NET团队送给.NET开发人员的云原生学习资源
    企业正在迅速采用云的功能来满足用户需求,提高应用程序的可伸缩性和可用性。要完全拥抱云并优化节约成本,就需要在设计应用程序时考虑到云的环境,也就是要用云原生的应用开发方......
  • velocity-1.7学习笔记
    Velocity是由Apache软件组织提供的一项开放源码项目,它是一个基于Java的模板引擎。通过Velocity模板语言(VelocityTemplateLanguage,VTL)定义模板(Template),并且在模板中不包......
  • 【Vuejs】114-从头开始学习Vuex
    一、前言当我们的应用遇到多个组件共享状态时,会需要多个组件依赖于同一状态抑或是来自不同视图的行为需要变更同一状态。以前的解决办法:a.将数据以及操作数据的行为都定义在......
  • whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵
    ......
  • 【杂谈】有三AI开源项目中的代码和教程,来学习的粉丝们应该要知道了
    我们的开源项目https://github.com/longpeng2008/yousan.ai早就存在了,但还是经常会遇到不知道这个项目的学习者。这个项目是我们目前唯一的技术性开源项目,里面包含适合新手......