JavaWebStudio中的方法与你做法相似,只不过JavaWebStudio是用DAO,你是用VO,也用带参数xxxAction.do?command=update&save=no&id=....。具体实现方法见:http://dev.csdn.net/user/kui

解决方案 »

  1.   

    我的VO类是数据库表的映射类,对数据库操作的也放在DAO里,我只不过不直接调用DAO,而是做了又做了一个外观层来做业务逻辑。我现在的问题就是在更新数据时要先用DAO把数据取出来,用VO保存着,然后又用form-bean的setter方法把值放在form-bean里。这是可以了,可是我后来在页面上把值改变了了后,又用form-bean的getter方法把值取出来放入VO中,再用DAO的更新方法更新数据库。这时存入数据库后,值却没有改变,还是我原来的值,可是我明明在页面上改变过值了。就这个问题,请教大家怎么解决。
      

  2.   

    楼主,修改要那么复杂吗?为什么不用submit提交?
      

  3.   

    贴更新部分的action中的代码?这种我一般用DispatchAction去做,它可以根据不同的参数值来执行不同的方法....
      

  4.   

    我有一个xxx.jsp页面中执行了多个操作,我在前一个页面是通过xxxAction.do?参数=....来在action中执行不同的方法。其中用传过来的参数来判断不同的方法进行不同的操作。例如这个action中要执行插入和更新的方法。我现在在更新的方法中就必须先要把数据库的值取出来,然后在点击按钮后,又执行了这个action,这次要保存更新的值了。我现在的解决方法是传参数时,传两个参数,一个是command,一个是save。在前一个页面点超链接时是这样的xxxAction.do?command=update&save=no,在我进入到xxx.jsp页面后,点提交按钮时,执行一个javascript,把save改成yes。之后就在action中用if来判断了,如果command=update且save=yes就实例化这个form-bean,并做更新数据库的操作。如果command=update且save=no的时候就用form-bean中的setter方法把从DAO中得到的数据库的值显示在页面上。不知道有没有更好的方法来实现这样的功能。还有请问DispatchAction如何去做?
      

  5.   

    请问你在xxx.jsp页面上改了数据以后点xxxAction.do后还是回到xxx.jsp么?这时xxx.jsp上显示的是你改了以后的数据么?
      

  6.   

    DispatchAction是Struts包含的另一个能大量节省开发时间的Action类。与其它Action类仅提供单个execute()方法实现单个业务不同,DispatchAction允许你在单个Action类中编写多个与业务相关的方法。这样可以减少Action类的数量,并且把相关的业务方法集合在一起使得维护起来更容易。要使用DispatchAction的功能,需要自己创建一个类,通过继承抽象的DispatchAction得到。对每个要提供的业务方法必须有特定的方法signature。例如,我们想要提供一个方法来实现对购物车添加商品清单,创建了一个类ShoppingCartDispatchAction提供以下的方法:那么,这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单,还有clearCart()方法清除购物车等等。这时我们就可以把这些方法集合在单个Action类,不用为每个方法都提供一个Action类。在调用ShoppingCartDispatchAction里的某个方法时,只需在URL中提供方法名作为参数值。就是说,调用addItem()方法的 URL看起来可能类似于:http://myhost/storefront/action/cart?method=addItem其中method参数指定ShoppingCartDispatchAction中要调用的方法。参数的名称可以任意配置,这里使用的"method"只是一个例子。参数的名称可以在Struts配置文件中自行设定。例如:
    <action name="cartForm" path="/cart" scope="session" type="com.guoan.cps.action.ShoppingCartDispatchAction" input="/jsp/fund/fundnvchg.jsp" validate="true" parameter="method">注意上面parameter="method",对于你的程序来说就是parameter="command".
      

  7.   

    to: tijor(taro)
    不,我转到了一个公共的页面上去(success.jsp)。但我再查看时,数据并没有改变
      

  8.   

    另外的一个问题:
    我如何在xxxAction.do?command=update.....的时候,在action中,用if(command=="update")后,把主键的那个<html:text.......>改为只读呢?
      

  9.   

    js:
    <%
    String commond=request.getParameter("commond");
    if (commond.equals("update")) {
    %>
    <script>
        document.forms(0).pmkey.readOnly=true;
    </script>
    <%
    }
    %>
      

  10.   

    检查一下Commit 是不是为false????????????
      

  11.   

    xunyiren(从jsp开始):
    只能在页面上写吗?不能在action里实现吗?
    还有,请解释一下document.forms(0).pmkey是什么意思?forms(0)代表什么?pmkey代表什么?
      

  12.   

    我修改过要提交的,你是指数据库的commit吗?这个jdbc自动就commit了。
      

  13.   

    forms(0)为页面的第一个表单,因页面通常都只有一个表单,才这样引用,而且这样可以不用管form的name是什么;
    pmkey是你主键所对应文本框的name;TO: 只能在页面上写吗?不能在action里实现吗?
    因页面控件只读需更改表单控件的readOnly属性,而它们分别位于服务器端和客户端,故无法直接更改...
    不过可以有一个变通的方法,在页面对应的ActionForm里加一个boolean型的readonly属性,初始值为false;并有相应的setter/getter方法,在需要时,在action中把ActionForm的该属性置为true.
    页面上,接收这个boolean值
    <bean:define name="contributeForm" property="readonly" id="rd" type="java.lang.Boolean"/>
    在需要只读的控件上:
    <html:text property="cntbcode" size="20" maxlength="5" readonly="<%=rd.booleanValue()%>" />
      

  14.   

    你看看你的form_bean的scope属性值是否在你请求的范围内,在看看你的表单有没提交