小弟最近刚学struts,请各位高人指点一下。我现在正在做页面,通过action将从数据查询的数据用logic:iterate显示到一个jsp页面。
页面代码如下:   <table border="1" width="50%">
   <tr bgcolor="#99aa99">
   <td align="center" colspan="4">
   <b><font size="6" face="隶书">准驾车型</b>
  </td>
   </tr>
   <tr bgcolor="#99cc99">
   <td align="center">
   <b>编号</b>
  </td>
  <td align="center" colspan="3">
   <b>名称</b>
  </td>
   </tr>
   <logic:iterate id="zhujiachexing" name="data" type="">
   <tr>
   <td align="center" width="50">
  
   <bean:write name="zhujiachexing" property="number"/>
 
  </td>
  <td align="center">
 
  <input type="text" size="40" name="name" value="<bean:write name="zhujiachexing" property="name"/>" style="text-align:right;">
 
  </td>
<td align="center" width="60">
  <html:link action="Jsp/Jibenxinxi/Zhunjiachexing/updatazhunjiachexing" styleClass="caozuo">修改</html:link>
</td>
<td align="center" width="60">
  <html:link action="Jsp/Jibenxinxi/Zhunjiachexing/deletezhunjiachexing" styleClass="caozuo">删除</html:link>
  </td>
   </tr>
   </logic:iterate> 
   </table>我是想做修改,删除和新建。修改和删除用link调用两个action处理数据,但现在根本得不到变量值,请高人指点一下,小弟万分感谢。还有新建,我希望点击新建,jsp页面的table就会自动创建一行用于用户录入数据
然后还有个按钮,点击后,将调用action将数据真正录入到数据库。这几个问题已经困扰我快一周了,我实在是没有能力解决,希望大家帮帮我。我现在没有分,我是刚注册的,有分以后不会忘记大家的,我先谢谢大家了。

解决方案 »

  1.   

    首先<logic:iterate id="zhujiachexing" name="data" type="">处type不能""应该有个确定的类型
    其次<html:link action="Jsp/Jibenxinxi/Zhunjiachexing/deletezhunjiachexing"处,我没有使用过link标签的action的,我用的是<html:link page="xxx.do" paramId="" paramName="" paramProperty="">其中paramId是参数名称paramName在你这就是zhujiachexing,paramProperty应该是你的number了,page属性应该换成struts的action地址
      

  2.   

    太好了,终于可以得到numberl了,这样的话,删除就可以操作了,但是修改还是不行,因为它无法得到name变量
    我name直接用的heml:text做的,就是想用户直接就可以在jsp页面进行编辑,然后将数据传递给action,进行修改,可以吗?
      

  3.   

    修改也可以,不过的给没有修改该连接加一个onclick事件
    通过该事件获得对应文字域的值,并修改自身的url(追加参数)
    以上方案一
    方案二就是每行都需添加到一个<html:form>中这样可以将链接修改为提交按钮
    如果不想修改为按钮可以在链接上加入onclick事件,事件就提交对应的form
      

  4.   

    你可以建一个action对应多个操作,比如你这里面的"删除","修改","新建",只需要对应一个action只需要在这个action里用判断语句对一个参数进行判断就能进行相应的操作了,往下看.因为iterate是依次枚举,你想对应某个记录进行操作,那你就把操作的连接写进iterater里不就OK了?比如:
    <logic:iterate id = "aaa" name = "bbb" >不需要写type没有特殊要求每次都没写过
         <bean:write xxxxxxx/>
         <a href = "xxx.do?disposeType=001&id=<bean:write name="aaa" property="id">">删除</a>   //超联结里的参数disposeType就是处理类型,可以在action里判断一下这个参数来决定进行什么操作,比如disposeType=002代表新建.id就是对应的那条记录的代理主键嘛,是数据库里的唯一标示,那么在action里只要有个这个id就能唯一地取出任何一个记录进行处理了.
    </logic:iterate>如果想要新建时候出现一个表单,你可以一开始就把表单写好,比如我一般都写在一个单独的table里,然后把他隐藏,想要新建的时候用javascript把这个table显示出来不就好了
    参考:一个连接或按钮里面加 onclick="display()"  //显示那个表单table<table style="display:none" id="displayNewTable"> //表单table,一开始隐藏在页面上
      表单项  
    </table>javascript内容function display(){
        document.getElementById("displayNewTable").style.display="";
    }
    这样那个table 就显示出来,你往里填吧,填完点这个table里的提交按钮就可以提交这个表单了
    ,但是我记得action好象只能绑定一个form.java,那就把这个form.java里写上所有要在这个action里调用的属性吧.
      

  5.   

    楼上说的我理解了,现在问题只是出在修改上面了
    仔细看我贴的代码:   <logic:iterate id="zhunjiachexing" name="data">
       <tr>
       <td align="center" width="50">
      
       <bean:write name="zhunjiachexing" property="number"/>
     
      </td>
      <td align="center">
     
      <html:text name="zhunjiachexing" property="name" size="40" style="text-align:right;" />
     
      </td>
    <td align="center" width="60">
      <html:link page="/Jsp/Jibenxinxi/Zhunjiachexing/updatazhunjiachexing.do?number=${zhunjiachexing.number}&name=${zhunjiachexing.name}" styleClass="caozuo">修改</html:link>
    </td>
    <td align="center" width="60">
      <html:link page="/Jsp/Jibenxinxi/Zhunjiachexing/deletezhunjiachexing.do" paramId="number" paramName="zhunjiachexing" paramProperty="number" styleClass="caozuo">删除</html:link>
      </td>
       </tr>
       </logic:iterate> 因为修改所需要的数据是应该从html;text里面取得的,但现在好象是从logic;iterate里取了,所以,不管你在文本框里怎样编辑数据都不会改变,我现在就只有这个难题了。希望谁能帮我解决一下,最好是代码,这样看着比较明白。
    先谢谢各位了。
      

  6.   

    <logic:iterate>标签外面肯定要加个form标签的,提交地址就是你的修改action主要问题就是批量修改,一种就是利用表单数组,你struts配置文件里面formbean定义一个java.lang.String[]数组接受或者提交之前把所有要修改的记录的各个属性,各自合并成一个字符串,然后到服务端拆解最后再通过循环更新
      

  7.   

    jsp:
    <html:form action="/update.do">
    <logic:iterate id="zhunjiachexing" name="data">
    ......
    .....
    <input type="checkbox" name="numbers" value="<bean:write name="zhunjiachexing" property="number"/>" /><html:text name="zhunjiachexing" property="name" size="40" style="text-align:right;" />
    <input type="submit" name="submitbtn" value="修改"/>
    </logic:iterate>
    </html:form>struts-config.xml关于update的formbean属性
    <form-property name="name" type="java.lang.String[]"/>
    update action部分代码 DynaActionForm daf = (DynaActionForm) actionForm;
                
                String[] names = (String[])daf.get("name");String[] numbers= (String[]) daf.get("numbers");for ( int num = 0; num < numbers.length; num++ ) {   //update zhunjiachexing set name=names[num] where number=numbers[num]
    }其他的自己根据需要写吧