在struts2中,在jsp页面上放了一个hidden标签,这个:<input type="hidden" name="tempWareHouse" value="">,在页面上还有一个<select>标签,当select标签的值改变的时候,我就给这个hidden标签赋了值,是这样赋值的:document.getElementsByName("tempWareHouse").value=obj.options[obj.selectedIndex].text;  obj是<select>标签的onchange事件中调用的javascript的参数,在<select>标签的onchange事件中传的是this,然后我在<FORM action="searchStockAdjustmentList" method="post" name="form"> form对应的这个searchStockAdjustmentList  action中放了一个叫tempWareHouse的属性,写了get和set方法,点击submit按钮后,为什么我在action中this.getTempWareHouse()总是取不到在页面上传的值呢?其它属性都可以啊 ,郁闷了我半天,总找也找不到问题所在啊....................求教!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    首先看看<select>标签的onchange事件发生后是否给hidden赋上了值...
      

  2.   


    确定赋上值了,用alert都可以把值show出来
      

  3.   

    如果要在action中获取页面传过来的参数,还得确保action类中为这个属性添加了set方法。
      

  4.   


    现在是确定有get set方法了........真是灵异的问题啊
      

  5.   

    不好意思,没看清你已经写了set方法
      

  6.   

    为什么不把select标签放在form表单中,并定义select的name值为tempWareHouse,这样你就不用重新设值了
      

  7.   

    <select>标签也是在<form>表单中的,现在是在这个jsp页面点击submit后,根据选择的条件,查出相应的结果,就转发到另一个页面,在在另一个面重要显示上一个页面输入的条件,<select>标签的value是存了那个仓库的ID的,显示的仓库的名称,到下一个页面它要显示名称,我就不想根据仓库ID再去连一下数据库了,浪费效能,就直接把选中的仓库名称传到后台,然后保存起来,在另一个页面就直接取了.
      

  8.   

    前台:
    <FORM action="searchStockAdjustmentList" method="post" name="form">
    <input type="hidden" name="tempWareHouse" value=""><select name="wareHouseID" onchange="javascript:setValue(this);">
    <option value="0" selected="selected">
    - - -
    </option>
    <c:forEach var="wareHouse"
    items="${requestScope.wareHouseList}" varStatus="sta">
    <option value="${wareHouse.ID}">
    ${wareHouse.cnName}
    </option>
    </c:forEach>
    </select>
    function setValue(obj){ document.getElementsByName("tempWareHouse").value=obj.options[obj.selectedIndex].text;

    }后台:private String tempWareHouse; public String getTempWareHouse() {
    return tempWareHouse;
    } public void setTempWareHouse(String tempWareHouse) {
    this.tempWareHouse = tempWareHouse;
    }request.setAttribute("contWareHouse",this.getTempWareHouse());
      

  9.   

    obj.options[obj.selectedIndex].text  把这个alert出来。
      

  10.   

    那你就在提交的时候,用
    var tempWareHouse=document.getElementsByName("tempWareHouse").value;
    alert(tempWareHouse);
    的方法看能不能打印出值来。
      

  11.   


    可以alert出来 有值,和选中的值是一样的
      

  12.   

    在setValue(obj)里能看到数据没有?
      

  13.   


    在submit按钮上加onclick事件    可以alert出数据来
      

  14.   

    document.getElementsByName("tempWareHouse").value的值是赋不到的吧?换成ById试试
      

  15.   


    这个不关事的,页面上只有这一个元素的name属性是tempWareHouse的
      

  16.   

    public class CommonDAOImpl<T> extends HibernateDaoSupport implements CommonDAO<T>  
      public void deleteObject(Class<T> c, Serializable id) { {//这是带泛型参数的方法
      Object obj=this.getHibernateTemplate().load(c, id);
      this.getHibernateTemplate().delete(obj);
      }
    }  function findprod(){   
      var id=dwr.util.getValues("findFrm");
      var c = "<%=Productioninfo.class%>";
      commonDAO.deleteObject(c, Serializable id);
      }为什么这我这样调用总是弹出对话框“Error”?????
      

  17.   


    不会报错,就是在this.getTempWareHouse()的时候的值总是""
      

  18.   


    这么神奇,确保页面中的tempWareHouse与action中的set和get方法是一致的。实在不行,剩下的就是RP问题了
      

  19.   

    刚才没事使用Struts2的标签尝试了一下,确实后台action中获取的hidden标签的值为null,
    然后改用普通的hidden标签<input type="hidden" name="testHidden" value="testHiddenNewValue" />能够在action中获取到值的;
    lz不妨试一下:<input type="hidden" name="tempWareHouse" value="testValue">
    先不要使用select标签的onchange事件赋值,看看直接这样写,后台action中是否能够获取到值...
      

  20.   

    如果写了getter和setter,就检查一下页面字段跟action里的字段名是否相同
      

  21.   

    function setValue(obj){ document.getElementsByName("tempWareHouse").value=obj.options[obj.selectedIndex].text;换成function setValue(obj){ document.getElementsByName("tempWareHouse").value=obj.options[obj.selectedIndex].value;就是取option值的那个,忘记是不是value了,别取text
      

  22.   

    出来了  直接在<select>标签的onchange事件中这样写就OK,
    onchange="javascript:document.all('tempWareHouse').value=this.options[this.selectedIndex].text;"
    奇怪啊,不知道为什么这样就行,有哪位可以解释一下,真是奇怪啊
      

  23.   

    document.all('tempWareHouse')...
    document.getElementsByName...
    哥们你怎么这么多不兼容的写法啊,一般JS只推荐使用ById进行赋值,楼上有一位提示你了,可是你连试都没试过就说这个不关事...
    其实你试下就知道了,即使你标签是name='a',不想再写个ID属性,也可以直接用ById获取元素,然后赋值,但是就不要用Name了,这个获取的是集合,给集合上的属性赋值,不代表是集合内元素的属性赋值!
      

  24.   

    正如楼上所说,document.getElementsByName是用于获得checkbox中的数组值,获得单独的值一般都需要通过byid来取得值。