`
zhongxuchen
  • 浏览: 33319 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2源码阅读疑问

阅读更多
有两个问题一直没有让我看明白,请帮忙解答一下:
1,ParametersInterceptor用来将request中的parameter设置到action中的属性中,应该有一个reflaction,但阅读源码setParameters怎么也没有看到将params设置到action中去的代码,请答惑
2,struts2中的标签没有找到有关跟template ftl对应的机制,比方:textTag没看到它是如何对应textTag.ftl的,因为以往开发标签直接在代码中输出html,我想struts2的标签应该是构造数据模型然后用模板输出html,但就找不到这一块的代码
分享到:
评论
6 楼 eric_hwp 2011-12-15  
高手中高手,崇拜
5 楼 case0079 2009-03-03  
哈哈
原来是这样.
也就是说
stack.setValue(name, value)
实际上是ValueStack持有一个ACTION的引用.对ValueStack执行setValue会同时对
ACTION副值

4 楼 kjj 2008-12-31  
你看看ognl的代码吧,我没看过,原来我也是这么想的,后来发现,ognl 代替了对象的创建和属性的注入,这也是页面paremeter name 为啥都是  user.name ,user.password 这样的写法
3 楼 aaron2007 2008-12-24  
看了不过好像还是不是很懂!我刚开始了解struts
不知道从何下手啊
2 楼 zhongxuchen 2008-04-28  
谢谢,确实是这样,哈哈,我看的不够深入呀
1 楼 myoldman 2008-04-28  
zhongxuchen 写道
有两个问题一直没有让我看明白,请帮忙解答一下:
1,ParametersInterceptor用来将request中的parameter设置到action中的属性中,应该有一个reflaction,但阅读源码setParameters怎么也没有看到将params设置到action中去的代码,请答惑
2,struts2中的标签没有找到有关跟template ftl对应的机制,比方:textTag没看到它是如何对应textTag.ftl的,因为以往开发标签直接在代码中输出html,我想struts2的标签应该是构造数据模型然后用模板输出html,但就找不到这一块的代码

1.请参考如下代码和注释
 protected void setParameters(Object action, ValueStack stack, final Map parameters) {
        ParameterNameAware parameterNameAware = (action instanceof ParameterNameAware)
                ? (ParameterNameAware) action : null;

        Map params = null;
        if( ordered ) {
            params = new TreeMap(getOrderedComparator());
            params.putAll(parameters);
        } else {
            params = new TreeMap(parameters); 
        }
        
        for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext();) {
            Map.Entry entry = (Map.Entry) iterator.next();
            String name = entry.getKey().toString();

            boolean acceptableName = acceptableName(name)
                    && (parameterNameAware == null
                    || parameterNameAware.acceptableParameterName(name));

            if (acceptableName) {
                Object value = entry.getValue();
                try {
                    stack.setValue(name, value);//这里通过ognl把parameter相应的值设置到action中(由于action对象是ognl value stack的compondroot所以对valuestack的默认操作都是针对action对象的属性.详细请阅读struts开发文档中和ognl相关的部分.
                } catch (RuntimeException e) {
                    if (devMode) {
                        String developerNotification = LocalizedTextUtil.findText(ParametersInterceptor.class, "devmode.notification", ActionContext.getContext().getLocale(), "Developer Notification:\n{0}", new Object[]{
                                e.getMessage()
                        });
                        LOG.error(developerNotification);
                        if (action instanceof ValidationAware) {
                            ((ValidationAware) action).addActionMessage(developerNotification);
                        }
                    } else {
                        LOG.error("ParametersInterceptor - [setParameters]: Unexpected Exception caught setting '"+name+"' on '"+action.getClass()+": " + e.getMessage());
                    }
                }
            }
        }
    }

2.struts的tag分为ui tag和非ui tag两种类型
ui tag默认都是通过freemarker的模板渲染的,
但是非ui tag,例如楼主说的TextTag本身就是用于i18n做输出之的localization的所以直接输出值即可,更本不需要用template渲染.
需要用到tag渲染的例如TextField这个tag.
该tag对应于jsp标签库的类为TextFieldTag,对应于struts2内部实现Componet类为TextField
TextField类中久定义了template的名称如下
 final public static String TEMPLATE = "text";

然后再根据不同的theme定义去struts2中template包对应的theme目录底下寻找template文件
例如如果theme是simple那么textfile tag对应的template为template/simple/text.ftl

如有问题,继续讨论,谢谢..



相关推荐

    struts-2.3.4-src.zip

    通过阅读Struts2.3.4的源码,不仅可以深入理解其工作原理,还能为自定义扩展或优化现有应用提供思路。同时,对于想要学习AOP、MVC设计模式以及Java web开发的开发者来说,这是一份宝贵的参考资料。在研究过程中,...

    ckeditor3.6.5+ckfinder2.1+struts2

    ckeditor3.6.5+ckfinder2.1+struts2的整合,破解方法,有源码,ckfinder.js已经被破解了, 可以直接用。ckfinder和struts2的整合在文档最后。 最新版本的ckfinder我没有找到破解方法, 所以用的2.1版本。 希望可以帮...

    struts2完全捕获404错误的方法

    Struts2是一个非常流行的Java Web框架,用于构建企业级应用。在开发过程中,错误处理是不可或缺的一部分,404错误通常表示服务器无法找到请求的资源。这篇文章将详细讲解如何在Struts2框架中完全捕获并处理404错误。...

    struts-bean:message使用

    - 阅读源码可以帮助理解`<bean:message>`标签的工作原理,包括标签处理器类的实现以及如何加载和解析资源包。 6. **实际应用** - 除了简单的文本显示,`<bean:message>`还可以用在动态生成复杂视图,如错误消息、...

    jsp 开发之struts2中s-select标签的使用.docx

    ### Struts2中s:select标签的使用详解 #### 一、引言 在Web开发领域,Struts2框架因其强大的功能和灵活的配置而受到广泛欢迎。其中,`s:select`标签作为Struts2标签库中的一个重要组成部分,在表单处理方面提供了...

    国家电力项目源码.zip

    【国家电力项目源码.zip】是一个包含完整源代码的压缩包,主要针对的是Java开发的SSH2(Struts2、Spring、Hibernate)框架项目。这个项目可能是为了帮助那些正在准备毕业设计答辩或需要深入学习Java Web开发的学生。...

    中国移动业务管理系统(struts+spring+hibernate)源码

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个...

    Struts Tutorial

    - **Struts框架简介**:Struts是一款基于Java EE的MVC(Model-View-Controller)框架,它为Web应用程序提供了一个结构化的开发模式,使得开发者能够更加清晰地组织代码,并简化了Web应用的开发流程。 - **本教程的...

    JSP网上教学资源共享系统(源代码+LW).zip

    2. **源码分析**:源代码通常包含服务器端的Servlet、JSP页面、JavaBean以及可能的DAO(数据访问对象)层和业务逻辑层。学习者可以通过阅读源码,了解MVC(Model-View-Controller)设计模式在实际项目中的应用,掌握...

    SSH模拟酷狗官网的源码+数据库

    在这个项目中,“SSH模拟酷狗官网的源码+数据库”提供了实现酷狗音乐网站功能的全套代码和数据库资源。下面将详细阐述SSH框架以及它在模拟酷狗官网中的应用。 1. Struts2:Struts2 是一个基于MVC(Model-View-...

    标准S2SH整合的学学生信息管理系统,含有数据库

    而“Demo”可能是一个包含源代码、配置文件和数据库脚本的项目文件夹,用户可以解压后导入到IDE(如Eclipse、IntelliJ IDEA等)中进行进一步的开发或学习。 在S2SH整合的学生信息管理系统中,开发者通常会创建一个...

    JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT)

    - 编码实现:编写JSP页面、Struts Action类、DAO(Data Access Object)层代码,实现前后端交互。 - 测试:单元测试、集成测试,确保各部分功能正常。 - 部署与上线:将应用部署到服务器,进行线上调试。 **6. 论文...

    东城大学在线答疑系统

    在文件"zxdy"中,可能包含了项目的源代码、配置文件、数据库脚本和其他相关资源。通过分析这些文件,可以深入了解项目的结构、功能实现和设计模式。对于学习Java Web开发的学生或开发者来说,这是一个很好的实战案例...

    ssh实践

    而"testSpring源码"可能是作者为了测试Spring功能而编写的代码,可能涵盖了Spring的IoC、AOP、事务管理等方面的应用。 学习SSH框架整合不仅能够提升开发效率,还能让你更好地理解Web应用的架构设计。通过实际项目的...

    B2B电子商务网站源码

    Java框架如Spring、Struts和Hibernate常被用于构建这样的系统,它们提供了MVC(Model-View-Controller)架构,便于管理和维护代码。 ASP.NET则是微软公司推出的用于构建Web应用程序的开发框架,它基于.NET ...

    微信小程序+微信小程序的茶叶线上购买系统后端(含所有源码设计)

    在26360+微信小程序+微信小程序的茶叶线上购买系统的压缩包中,可能包含了以下文件:项目源代码(包括SSH框架的Java代码和前端HTML、CSS、JavaScript文件)、数据库脚本、配置文件、微信小程序的项目文件以及可能的...

    tm-bill.zip

    在"tm-bill"这个项目中,可能包含了相关的配置文件、Java源代码、JavaScript脚本、CSS样式表以及HTML模板等。开发者可能需要解压文件,查阅README或者其他文档了解具体部署和使用方法。项目可能包含了一个工作流,从...

    ibatis与strtus结合的登陆小例子

    通过阅读源代码和注释,你可以学习到如何配置这两个框架,如何编写Action和ActionForm,以及如何设计和执行SQL查询。此外,通过实践和探讨,你可以更深入地理解这两个框架的交互机制和最佳实践。 总的来说,这个小...

Global site tag (gtag.js) - Google Analytics