非常可惜今天我才看到这篇贴子,基于j2ee struts架构做开发以有近一年时间,一直没有时间做反思和总结,只在最近的开发中遇到了很大的问题,感觉自己好像开始陷入泥潭了。我想最大的原因在于我及我的团队对于struts有很多的误解和误用,导致程序现在越来越难于修改和维护。
看了numiddle的一些只言片语,感觉自己可能找到了黑夜中的航标,可惜,不知什么原因我只看到文字没有看到源代码,对于这个
“非常重要的一点:不要在Action中包含任何业务逻辑操作,而是应该调用一个Model层的JavaBean来实现你的业务逻辑操作。在某些情况下,可能包含少许表现逻辑。这样,就可以充分进行代码重用,比如上例中调用的IStorefrontService接口,这个接口在实现时完全可以不用考虑客户端的事情,所以它可以被其它部分或者其它系统所使用。否则的话,Action会变得非常难于理解,难于维护,代码也不能重用。”
虽然能理解但是在实际使用中如何操作还有很大的疑惑,真希望能有一夜时间与numiddle促膝长谈,可惜现在身在马来西亚。只希望numiddle看到此文能把相关原码贴上论坛,小弟在这里不胜感激。

急盼!

建议你到theserverside.com下载Struts的电子书,见下面连接或直接用struts 直接搜索:
http://www.theserverside.com/portal?
numiddle所说的翻译自上述的这本书,其中包含一个Storefront的例子,不过它讲的是1.1。
storefront应用DAO设计模式,IStorefrontService只是一个接口,StorefrontServiceImpl是具体实现。

你好.
我还刚学struts,想请问如何在action-mapping中设置path参数?

我觉得要理解struts,可以看它的源代码,我看了后,感觉serverside网站上的那本书,大部分来自于源码中的注释。struts的源代码写的非常的优秀,特别是注释,非常的清晰。
对于你这个问题,更具体地说应当是怎样设置action中的path参数,在action中,他的path代表的可以说就是这个action的名字,也就是在页面的form中aciton中写的值,
例如在Jsp页面中


<html:form action="/test" >
..
</html:form>

在你的配置文件中,存在着一项


<action path="/test" ..../>

struts 的编码风格可以作为一种学习规范,真的很好

真是。。。。。。唉!怎么说呢,我好感动!终于找到一个可以提问的地方拉!

我想请问楼顶的那位高人,如果要给formbean里赋值难道只有通过struts的html tag一途吗?当然了,我理解:也可以在.do;后面加上key=value,这样也可以被formbean接受到。

但是我要的不是这个,我想要用普通的html form给formbean赋值,like this:

<input name=sub value=helloworld! >

我试过了,formbean收不到这个值,而我把它改成:
<html:text property="sub" size="16" maxlength="16"/>

就可以正常接收表单值了

struts最不好的一点就是用它的html tag做外观一点也不直观,页面和美工根本不知道<html:text......是啥玩意儿,虽然说它把html和jsp代码剥离了,但是它又把新的陌生代码引入了html里~~~~

我不知道怎么把那带有尖括号的代码帖出来

反正,我给出的那两个例子,第一个是html代码,第二个是struts的html tag

楼主你看文字也应该能明白意思了吧?

不 好 意 思 , 我 的 问 题 解 决 了 , 都 是 粗 心 给 害 的 , 原 来 可 以 的 , 直 接 用 html的 input发 送 request也 可 以 被 formbean所 接 收 的 。 其 实 我 就 一 直 纳 闷 着 呢 , 从 客 户 端 提 交 的 信 息 的 页 面 必 竟 都 是 html的 怎 么 可 以 和 struts的 html tag扯 上 关 系 呢 ? ? 现 在 终 于 想 明 白 了

请问高手 action中的perform方法和execute方法有那些不同,好象用execute方法的比较多.另外struts-config.xml中的global-forwards全局转
发和forwards有什么不同.静候回复 谢谢.

Perform是struts1.0以前用的方法,1.1后,struts建议用execute方法。

Forward
在action中return一个actionforward后,struts会先在这个action下寻找对应的forward,如果找不到再到global-forward中查找!

我发现structs的例子(structs-example)中有action.xml,struct_config.xml,database.xml和web.xml等4个配置文件
而一般的例子中只有struct_config.xml,web.xml两个。我想只有这两个应该是必须的吧,那么系统是在哪里引用到action.xml呢?我没有找到

struct_config.xml有:

<!-- Edit user registration -->
<action path="/editRegistration"
type="org.apache.struts.webapp.example.EditRegistrationAction"
name="registrationForm"
scope="request"
validate="false">
<forward name="success" path="/registration.jsp"/>
</action>

而action.xml中有

<!-- Edit user registration -->
<action path="/editRegistration"
actionClass="org.apache.struts.webapp.example.EditRegistrationAction"
formAttribute="registrationForm"
formClass="org.apache.struts.webapp.example.RegistrationForm">
<forward name="success" path="/registration.jsp"/>
</action>

两个都在mapping里面,我不知道他们各自实现什么功能。我感觉差不多呢,有什么区别和联系呢》
初学structs,请大家帮忙,别耻笑。

action.xml是struts较早版本中使用的配置文件, 在struts1.0和1.1中都不需要了

请问高手

Action中的代码是

for (int i=0;i {
outertypeItems.add(new LabelValueBean(getNameList.getData(i,"V_KEYWORD_NAME"),getNameList.getData(i,"V_KEYWORD_NAME")));
}
mysession.setAttribute("outerItems",outertypeItems);

jsp中TAG是
html:select property="selOutertype"
html:options collection="outerItems" property="value" labelProperty="label"

为什么会出现
org.apache.jasper.JasperException: Cannot find bean under name outerItems
请回复谢谢;

毫无疑问, 在进入你的JSP页面后, pagecontext中肯定没有outerItems这个Attribute, 你现一步一步往前查一下, 肯定能找到原因的.

非常非常好,受益很多,希望楼主在写下去。