自定义框架_属性设置 | 学习笔记

简介: 快速学习自定义框架_属性设置,介绍了自定义框架_属性设置系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门自定义框架_属性设置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7331


自定义框架_属性设置

 

一、自定义框架_属性设置

核心过滤器里:

//已将对应得action映射到对应请求上。

Action targetAction=reqToAction(req);

//创建action对象

Try{

ObjectproxyAction= crteateProxyAction(targetAction.getClasses())

//将用户提交的数据设置到action的属性上

setProperty(req, proxyAction, targetAction. getClasses());

//执行action的方法

//处理结果

}catch (Exception e){

//TODO Auto-generated catch block

e.printStackTrace();

}

创建 action 对象是几个步骤里最简单的。接下来创建 action 对象。去做件事情,返回的是 Object 对象。crteateProxyAction 只是代用的 Actionx 型,不是真正的 Action 型,当然这里是真正的 Action 型。
String className 创始人建立的,应先判断一下。当名字等于空时,就会报错。在framework.xml 里,就会不显示 class

<?xml version="1.0" encoding="UTF-8"?><framework><action name= "hello"class="cn.sxt.action.HelloAction"<result name= "success "type="redirect ">/index. jsp</result><result name= "failed"type="redirect">/ index. jsp</result>

</action></ framework>

办法一:

在解析时不给报错,继续运行。

办法二:

private Object crteateProxyAction(String className){
时就报错,

接着就去获得 Class clzz = Class.forName(className)。给它后,通过它创建对象。防止异常,用 Exception。接着正常调用,取名为 Object proxyAction=,将这个方法调用。

调用方法的参数是根据 Action targetAction=reqToAction(req);目标上得到的。

接着处理异常,将异常往外处理。将将用户提交的数据设置到 action 的属性上、执行action 的方法、处理结果放入异常里。说明已将将用户提交的数据设置到 action 的属性上,接着就会处理事情。接着讲解将用户提交的数据设置到 action 的属性上

思考问题:

现将数据传给 Action 对象,对象会传给 proxyAction ,给 proxyAction 设属性,就要将对象给 proxyAction,这是第一。现数据在HttpServletRequest req = (HttpServletRequest)rq;的对象里,现要将数据设入Object proxyAction,就要通过 class 进行设置。

理论上要把 class 传给

private void setProperty(HttpServletRequest req, Object obj,),

现没有 class,就转 className

private void setProperty(HttpServletRequest req, Object obj,)调setProperty 方法,

req, proxyAction, targetAction. getClasses给 setPropert。首先用户提交哪些参数,是 Map 对象,将 Map 对象取出。取出后,它的本质是用于存放尺寸,前面是尺寸,后面是数据。将 Map 数据解代,得到K型,接着写 Object,接着测试。

Console:

java. lang. ClassNotFoundException:at org. apache. catalina. loader . WebappClassLoader . loadClass (WebappClassLoat org.apache. catal ina. loader . WebappClassLoader.loadClass (WebappClassLo;

at java. lang. class. forName(Native Method)at java. lang. Class. forName(Class . java:171)at cn. sxt. filter . CoreFilter. createProxyAction(CoreFilter. java:64)

没有找到对象,报出异常。将对象写出,因为需要对象传参。做简单属性处理。接着重新启动,得出 pwd 和 name,Y 是数组,所以只需获取 K。不用取里面的数组。接着刷新,得到 ped---1111和 name---zhangsan。因为 keySet 没有顺序,所以 pwd 和name 不用管顺序。将数据取出后,将数据给对象 obj。首先创建 class 这样String className 就不用传了。用一次即可,得到 Object

HelloAction.java:

package cn. sxt. action;public class HelloAction {private String name ;private String pwd;

publice String execute() {

System. out . println(name+"----"+pwd) ;

return “success";public String getName() {return name ;}public void setName(String name) {this . name = name ;}public String getPwd() {return pwd ;public void setPwd(String pwd) {this . nwd=nwd:

Console:

2015-8-21 9:33:04 org. apache. catalina.startup.Catalina start
信息: Server startup in 893 ms
pwd---[Ljava. lang . string;@40363068
name---[Ljava. lang. String;@25a41cc7

/ /得清求名String reqName-path. substring( path.1astIndex0f("/")+1, path.lastIndereturn ActionMapper . actionMap. get(reqName);}private Object crteateProxyAction(String className)throws Exception{Class clzz = Class.forName(className)

Return clzz.newInstance();}

//将用户提交的数据设置到 action 的属性上—简化很多

private void setProperty(HttpServletRequest req, Object obj, String className)

//创建class

Class clzz=obj.getClass();

Map map=req. getParameterMap();

for(Iterator iter = map. keySet(). iterator();iter . hasNext();){

object key=iter .next();

//根据提交参数去找Field

当 Field 为空时,不用作或报异常。先将异常往外抛。不为空往下走,进行赋值。不知道 obj 是什么对象用 obj

若想做好,在Field field = clzz.getDeclaredField(key.toString())

判断类型,是 inter 给 inter,double 给 double,便于进行类型转换。

Field field = clzz.getDeclaredField(key.toString())

if(field==null){

continue;

}

field.setAccessible(true);

//在这进行设值时,要进行相应的类型转换---省略了

field.set(obj, req. getParameter(key . toString()));field. setAccessihlel(false):

field.set(obj,value)

System. out . println(key+”---“+rep.getParmeter(key.toString()));

相关文章
|
29天前
|
前端开发 小程序
扩展uview复选组件库支持自定义图片+自定义内容
扩展uview复选组件库支持自定义图片+自定义内容
63 6
|
2月前
|
前端开发 PHP
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局
本文介绍了ThinkPHP6中实现模板布局的三种方式:全局配置方式、模板标签方式和动态方法布局,并通过示例代码展示了如何在项目中应用这些布局方式。
ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局
|
4月前
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
229 1
|
4月前
|
搜索推荐 C#
XAF 属性编辑器(PropertyEditor)- 原理篇
XAF Blazor 的 PropertyEditor 在 DEV 24.1.3 中经历了重大改进,更接近 WinForm。PropertyEditor 担任业务逻辑与各平台交互的角色,利用 INotifyPropertyChanged 监听属性变化。新版本弃用了 ComponentAdapter,代之以接口和基类,简化自定义编辑器的创建,降低了复杂度,同时增加了 ComponentModel 的 ComponentType 属性以自动化组件渲染和属性映射。这使得 Blazor 的 PropertyEditor 创建变得更为简便。
|
6月前
|
JavaScript 前端开发 API
【每周一个小技巧】如何自定义客服、生活号组件的样式
【每周一个小技巧】如何自定义客服、生活号组件的样式
66 8
|
6月前
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
72 5
|
移动开发 前端开发 Java
自定义框架_最后处理 | 学习笔记
快速学习自定义框架_最后处理,介绍了自定义框架_最后处理系统机制, 以及在实际应用过程中如何使用。
自定义框架_最后处理 | 学习笔记
|
Java 开发工具 Windows
五、实现自定义配置属性动态加载
在我们日常开发项目时,经常需要自定义一些配置属性用于我们项目的一些启动配置,这里我们就直接在application-dev配置文件中直接实现一下自定义配置属性的读取与使用,便于我们在dev和prod配置文件来回切换。
97 0
五、实现自定义配置属性动态加载
|
XML Java 数据格式
自定义框架配置解析 | 学习笔记
快速学习自定义框架配置解析,介绍了自定义框架配置解析系统机制, 以及在实际应用过程中如何使用。
自定义框架配置解析 | 学习笔记
自定义加载动画的两种实现方式
自定义加载动画的两种实现方式