最近一直在看视频学习struts2.看到struts的表单标签中的下拉列表获取不到值了。我查了查。主要原因就是:listKey和listValue的问题源码如下:一个省的类package com.test.vo;public class Province {
private Integer pId;
private String pName;
private String PCity;
public Province(Integer pId, String pName, String pCity) {
this.pId = pId;
this.pName = pName;
PCity = pCity;
}
public Province() { }
public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
public String getPCity() {
return PCity;
}
public void setPCity(String pCity) {
PCity = pCity;
}
}这是一个Action类package com.accp.testAction;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.opensymphony.xwork2.ActionSupport;
import com.test.vo.Province;public class FormAction2{

/**
 *  
 *  
 */
 private List<Province> province;
public List<Province> getProvince() {
return province;
}
public void setProvince(List<Province> province) {
this.province = province;
}
public FormAction2(){
province=new ArrayList<Province>();
province.add(new Province(1, "江西", "南昌"));
province.add(new Province(2, "山西", "太原"));
province.add(new Province(3, "广东", "广州"));
province.add(new Province(4, "江苏", "南京"));
}
}
还有一个表单:主要代码:
<s:select list="#fa.province" name="province" headerKey="-1" headerValue="--省--" label="籍贯" listKey="sa" listValue="sa"></s:select>如果把listKey和listValue去了。下拉列表里就是一个对象的地址。反之则是就是空的。但是有四个模块。option里面没东西。编译源文件如下:<td class="tdLabel"><label for="login_province" class="label">籍贯:</label></td>
    <td
><select name="province" id="login_province">
    <option value="-1"
    >--省--</option>
    <option value=""></option>
    <option value=""></option>
    <option value=""></option>
    <option value=""></option>
 
 
</select>

解决方案 »

  1.   

    忘了改了
    <s:select list="#fa.province" name="province" headerKey="-1" headerValue="--省--" label="籍贯" listKey="pId" listValue="PName"></s:select>各位大神。。求教了。
      

  2.   

    当然还有ben了。<s:bean name="com.accp.testAction.FormAction2" id="fa"></s:bean>
      

  3.   

    <s:select list="province" name="province" headerKey="-1" headerValue="--省--" label="籍贯" listKey="pId" listValue="pId" "></s:select>你懂得。
      

  4.   

    Action 里面对这个province进行封装了吗?即get(),set()方法,还有pid和pname有没有写错,
    注意大小写,大哥你那个pname写错了,应该是pName,而不是PName
      

  5.   

    <s:select list="province" name="province" headerKey="-1" headerValue="--省--" label="籍贯" listKey="pId" listValue="pId" "></s:select>话说。无论如何这种写法也取不到值吧
      

  6.   

    这里改了。是listValue="pName";但我发下一个很奇怪的现象:如果改成listKey=PId和listValue="PName"就没有问题。求解
      

  7.   


    谢谢您的提醒。但是我这改了。还是没有用。而且我发现一个很奇怪的现象:就是在action类中的属性必须是大写的。如果是小写就出不来了。如果是在action类中是大写。在listKey和listValue都用PId和Pid是一样的。求解。。
    另外。我又写了一个action类里面放的是map集合。如下代码
    private Map<Integer,String> province;
     public Map<Integer,String> getProvince() {
    return province;
    }
    public void setProvince(Map<Integer,String> province) {
    this.province = province;
    }
    public FormAction1(){
    province=new HashMap<Integer,String>();
    province.put(1,"江西");
    province.put(2,"湖南");
    province.put(3,"湖北");
    province.put(4,"广东");
    province.put(5,"广西");}
    但这里面就取不出来了用select标签
    [code]
    <s:bean name="com.accp.testAction.FormAction1" id="fa2"></s:bean>
    <s:select list="#fa2.province" listKey="PId" listValue="PName" headerKey="-1" headerValue="--省--" emptyOption="true" name="province" label="籍贯" ></s:select>[/code]
    无论pid大小写。难道我的action类写错了?
      
      

  8.   

    这是login.jsp代码:<s:bean name="com.accp.testAction.FormAction1" id="fa2"></s:bean>
    <s:select list="#fa2.province" listKey="PId" listValue="PName" headerKey="-1" headerValue="--省--" emptyOption="true" name="province" label="籍贯" ></s:select>
    真心求解。。谢谢。。
      

  9.   

    getPname() ; getP``();  总之 是通过get 方法获取参数 当然大写P了