论坛首页 Java企业应用论坛

我在使用webwork做项目时遇到的问题

浏览 3533 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-07-27  
使用webwork2.2做了三个项目了,都不是很大,在使用过程中也发现了有些地方不太好处理,所以请各位帮忙看看。
先说说我整个项目的框架,很简单的,数据层+业务逻辑层+Action+jsp
数据层、业务逻辑层和action还有jsp页面的通用代码是自己写了一个代码生成工具根据数据库结构生成xml文件,再生成java和jsp代码,基本生成以后就可以跑起来了。
现在是生成的代码中,每个数据表都对应一个Action,每个Action都有几个通用的方法:
toListPage()
toAddPage()
toEditPage()
performAddAction()
performEditAction()
performDeleteAction()

这里还用了Model-Driven,每个Action里面都有一个针对这个数据表的VO作为这个Action的Model。
现在发现有下边的问题不知道如何解决才能够漂亮清晰:
1、关于页面嵌入java代码
   我做东西想尽量做的更好更完美,所以如果我用了ww的标签我就不想在jsp页面里面再嵌入哪怕是一句java代码,但是好像简单的没问题,但复杂一些的问题就出来了。比如我要做一个联动的下拉菜单,菜单的内容是由数据库取出来的。这时就不得不在jsp页面里插入java代码。比如下边:
<%
MagazineContentVO model = (MagazineContentVO)stack.findValue("magazineContentVO");
String viewName = "";
String strContentID = "";
if(model != null)
{
viewName = model.getMagazineName() + "(" + model.getMagazineYear() + "年第";
viewName += model.getMagazineNumber() + "期,总第" + model.getMagazineTotalNumber() + "期)";
strContentID = model.getMagazineContentId() + "";
}

MagazineItemService itemService = new MagazineItemService();
MagazineSubitemService subitemService = new MagazineSubitemService();

List itemList = new ArrayList();
if(model != null)
{
  PageDataObject allItem = itemService.getMagazineItem(model.getMagazineId(),10000,1);
itemList = allItem.getDataList();
}
%>
<script>
function changeItem()
{
var itemId = document.getElementById("model.itemId");
<%
for(int i=0;i<itemList.size();i++)
{
MagazineItemVO item = (MagazineItemVO)itemList.get(i);
%>

if(itemId.value == <%=item.getItemId()%>)
{
var subitemId = document.getElementById("model.subitemId");
subitemId.options.length = 0;
option = new Option("无","0");
subitemId.add(option);
<%
PageDataObject obj = subitemService.getSubitemList(item.getItemId(),10000,1);
List subitemList = obj.getDataList();
for(int j=0;j<subitemList.size();j++)
{
MagazineSubitemVO subitem = (MagazineSubitemVO)subitemList.get(j);
%>
option = new Option("<%=subitem.getSubitemName()%>","<%=subitem.getSubitemId()%>");
subitemId.add(option);
<%
}
%>
}
<%
}
%>
}
</script>
上面的代码就是一级栏目和二级栏目下来列表的联动代码,但是看着这些代码就感觉不爽,但目前我也想不出什么好办法解决。

2、Action里面包含数据的问题
生成每个Action的时候虽然只有一个model,但是往往有些业务需要更多的参数,那我就不得不在Action里面加入多余的东西来让Action可以接收到数据,但很多情况,这些多余的东西和这个Action其实本身并没有很大的联系,只是作为一个参数而已,多加一个两个还可以忍受,但是如果某个Action需要的参数非常多而且很没有规律不能放到一个class里面去封装,这时这个Action就非常难看了,比如,我要显示一本杂志里面的文章的信息,文章是和杂志有个对应关系,所以文章的model里面没有杂志的名称,但我又需要把杂志名称显示出来,于是我又有两种方式:a.在我的VO里面,加入一个杂志名称的属性和getset方法,然后取数据的时候同时把这个属性填充,这样我可以直接用文章的model中的属性。b.直接在action里面加入一个属性来使用。我一直是按照第一种方式做的,但是我怕以后,我的VO里面的属性越来越多越来越乱,就不好维护了,现在加入的可能和VO本身还有些关系,但如果加入另外一些和文章没有关系的属性,我觉得会乱七八糟。这是第二个问题。

3、在jsp页面用标签的问题
很多时候我需要在jsp页面的表单中显示数据,而我一般是用Dreamwaver调整页面,但是把标签加进去,dw里面看到的页面就不太对了,而且还可能修改了我的代码,这是比较麻烦的。比如:
本来我手写的是这样的代码
<input name="model.publishCycleName" type="text" size="30" value="<ww:property value="model.publishCycleName"/>" />
到后来dw就强制的给我加了一个回车符,变成了
<input name="model.publishCycleName" type="text" size="30" value="<ww:property value="model.publishCycleName"/>"
/>
这样数据就会出问题,多了一个回车符。
类似这样的问题还有很多,一直很头痛.....


暂时先提出这么多问题,希望帮忙回答一下,感激不尽!!!!
   发表时间:2006-07-27  
1 webwork有级联选择的tag

2 你好像还没有领悟怎么用好OGNL

3 。。。
0 请登录后投票
   发表时间:2006-07-27  
老大详细说说啊,俺比较菜,第一个我可以自己查,第二个麻烦说的详细点好不?
0 请登录后投票
   发表时间:2006-07-27  
3,用ww的标签根本不需要写这样的语法……
<input name="model.publishCycleName" type="text" size="30" value="<ww:property value="model.publishCycleName"/>" />
2. Magzine.Article.name
0 请登录后投票
   发表时间:2006-07-27  
不得不说,你还停留在struts那种Formbean的思考方式中,多翻翻这一版的帖子吧,有许多关于Webwork的ModelDriven的讨论。
0 请登录后投票
   发表时间:2006-07-28  
downpour 写道
不得不说,你还停留在struts那种Formbean的思考方式中,多翻翻这一版的帖子吧,有许多关于Webwork的ModelDriven的讨论。

同意楼上,
1、<ww:doubleselect />,在Action中,好象用个Map来实现,在获得第二个List的时候,遍历Map,参考WW官方例子;
2、文章里面添加所属的杂志引用,象这样article.magazine;
3、<ww:textfield name="article.xxx" />如果name和value的一致的话,value可以省略,article.xxx有值存在的话,就会自动填充。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics