2008-04-28
Struts2源码阅读疑问
有两个问题一直没有让我看明白,请帮忙解答一下:
1,ParametersInterceptor用来将request中的parameter设置到action中的属性中,应该有一个reflaction,但阅读源码setParameters怎么也没有看到将params设置到action中去的代码,请答惑
2,struts2中的标签没有找到有关跟template ftl对应的机制,比方:textTag没看到它是如何对应textTag.ftl的,因为以往开发标签直接在代码中输出html,我想struts2的标签应该是构造数据模型然后用模板输出html,但就找不到这一块的代码
1,ParametersInterceptor用来将request中的parameter设置到action中的属性中,应该有一个reflaction,但阅读源码setParameters怎么也没有看到将params设置到action中去的代码,请答惑
2,struts2中的标签没有找到有关跟template ftl对应的机制,比方:textTag没看到它是如何对应textTag.ftl的,因为以往开发标签直接在代码中输出html,我想struts2的标签应该是构造数据模型然后用模板输出html,但就找不到这一块的代码
评论
zhongxuchen
2008-04-28
谢谢,确实是这样,哈哈,我看的不够深入呀
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,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
如有问题,继续讨论,谢谢..
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 188 次

- 详细资料
搜索本博客
最新评论
-
Struts2源码阅读疑问
谢谢,确实是这样,哈哈,我看的不够深入呀
-- by zhongxuchen -
Struts2源码阅读疑问
zhongxuchen 写道有两个问题一直没有让我看明白,请帮忙解答一下: 1, ...
-- by myoldman -
如何用java将url的内容保 ...
呵呵 我们是在爬虫抓到网页后 将网页保存为.mht文件的 不过是别人做的
-- by Max_1106 -
如何用java将url的内容保 ...
zhongxuchen 写道现在个人想通过java开发一个IE的小插件,功能是在 ...
-- by zhongxuchen






评论排行榜