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

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

开发者学堂课程【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()));

相关文章
|
2月前
|
前端开发 小程序
扩展uview复选组件库支持自定义图片+自定义内容
扩展uview复选组件库支持自定义图片+自定义内容
105 6
|
28天前
|
存储 数据安全/隐私保护
鸿蒙开发:自定义一个动态输入框
在鸿蒙开发中,如何实现这一效果呢,最重要的解决两个问题,第一个问题是,如何在上一个输入框输入完之后,焦点切换至下一个输入框中,第二个问题是,如何禁止已经输入的输入框的焦点,两个问题解决完之后,其他的就很是简单了。
49 13
鸿蒙开发:自定义一个动态输入框
|
1月前
|
UED 开发者 容器
鸿蒙next版开发:ArkTS组件通用属性(位置设置)
在HarmonyOS next中,ArkTS提供了align、direction、position、markAnchor、offset和alignRules等通用属性,用于精确控制组件在用户界面中的位置和布局。本文详细解读了这些属性,并提供了示例代码进行说明。通过这些属性,开发者可以实现精确布局、动态界面调整和提升用户体验。
173 6
|
1月前
|
UED 开发者
鸿蒙next版开发:ArkTS组件通用属性(边框设置)
在HarmonyOS 5.0中,ArkTS提供了丰富的边框设置属性,允许开发者自定义组件的边框样式,提升应用的视觉效果和用户体验。本文详细解读了border属性的使用方法,并提供了示例代码,展示了如何设置不同边的边框宽度、颜色、圆角和样式。边框设置在UI开发中具有重要作用,如区分组件、强调重要元素和美化界面。
130 6
|
1月前
|
UED 开发者
鸿蒙next版开发:ArkTS组件通用属性(禁用控制)
在HarmonyOS 5.0中,ArkTS引入了禁用控制属性,允许开发者控制组件的可用状态,提升用户界面的交互性和响应性。本文详细解读了ArkTS中组件的禁用控制属性,并提供了示例代码,展示了如何使用`disabled`属性来禁用按钮等可交互组件,从而防止用户误操作、引导用户流程和提升用户体验。
57 4
|
1月前
|
UED
鸿蒙next版开发:ArkTS组件通用属性(前景色设置)
在HarmonyOS 5.0中,ArkTS提供了丰富的组件样式设置能力,包括前景色设置。本文详细解读了ArkTS中前景色设置的通用属性,并通过示例代码展示了如何使用foregroundColor属性设置组件的前景色,从而提升界面美观性和用户体验。
100 1
|
5月前
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)
333 1
|
移动开发 前端开发 Java
自定义框架_最后处理 | 学习笔记
快速学习自定义框架_最后处理,介绍了自定义框架_最后处理系统机制, 以及在实际应用过程中如何使用。
自定义框架_最后处理 | 学习笔记
|
C#
WPF整理-为控件添加自定义附加属性
原文:WPF整理-为控件添加自定义附加属性 附加属性,大家都不陌生,最常见的是Canvas.Left/Canvas.Top,类似的也有Grid.Row/Grid.Column等附加属性。举个最常见的例子 需要说明的是并不是所有的附加属性都是元素放进去后才会有附加效果,上面的例子只是刚好是这种错觉的巧合情况,Grid.Row也属于这种巧合。
2131 0
WPF整理-为控件添加自定义附加属性
|
Java 开发工具 Windows
五、实现自定义配置属性动态加载
在我们日常开发项目时,经常需要自定义一些配置属性用于我们项目的一些启动配置,这里我们就直接在application-dev配置文件中直接实现一下自定义配置属性的读取与使用,便于我们在dev和prod配置文件来回切换。
102 0
五、实现自定义配置属性动态加载

相关实验场景

更多