在一个添加页面  有一个下拉列表   当别的项有空值时 验证后还是反回到添加页面  此时就会报错
tag 'select', field 'list', name 'daily.project.projectId': The requested list key 'projectList' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
可能是验证从新返回到此页面时,下拉列表的LIST空了   这个问题应该怎么解决呢  XML文件:
        <action name="dailyAdd" class="dailyAction" method="add">
            <result name="success" type="redirect">dailylist.action</result> 
            <result name="input">/jsp/daily/daily_add.jsp</result>          
        </action>  
JSP页面的下拉列表:<tr height=25>
    <td bgcolor=#B1CDF2 align=center>
项目名称:
    </td>
    <td>
    <s:select name="daily.project.projectId" cssClass="text Wdate" list="projectList" listKey="project.projectId" listValue="project.name" headerValue="--请选择--" headerKey=""/>
    </td>
</tr>

解决方案 »

  1.   

    简单办法:把projectList绑定到session作用域
      

  2.   

    Action中projectList属性的get方法中取得值。
      

  3.   


    这点我怎么就没有想到呢。但是用这个方法的前提是LZ用的难策略是不XML,而是重写action中的validator()方法才可以
      

  4.   

    LZ绑定session传值都不会使用吗?看看你action中的projectList是从哪里取得的,在哪里绑定的,修改一下就可以!实在不会可以贴代码,大家帮你修改
      

  5.   

    都给我说蒙了  我ACTION中 验证只有 下拉列表的
    /**
     * 逻辑验证-添加
     */
        public void validateAdd() {
    try {
    if (daily.getProject().getProjectId() == null) {
    this.addFieldError("daily.project.projectId", "请选择项目名称");
    }
    } catch (Exception e) {
    this.addFieldError("user.name", "数据库连接错误,验证失败");
    }
    }
      

  6.   

    public String toAdd() throws Exception {        
         try{
         nowDate = strCurDate;
         projectList = projectService.findUserProject(session.get("pubUser").getUserId());
         return SUCCESS;
         } catch (Exception e) {        
         this.addActionError("操作错误,"+e.toString());
         return ERROR;
        }
    这里获得PROJECTLIST
      

  7.   

    action代码不全(projectList是怎样查询出来,然后绑定的?)
      

  8.   

    projectList = projectService.findUserProject(session.get("pubUser").getUserId()); 这不就查出projectList 了么?
    toAdd是跳转到 添加页面的 下面的是添加:
        public String add() throws Exception {
            try {
             daily.setUserId(session.get("pubUser").getUserId());
             daily.setDailyDate(nowDate);
             service.save(daily); 
         return SUCCESS;  
            } catch (Exception e) {        
                this.addActionError("操作错误,"+e.toString());
                return ERROR;
            }
        }
      

  9.   

    <result name="success" type="redirect">dailylist.action </result> 
    配置action的跳转好像就搞错了,  <result type="redirect-action">dailylist</result>
    另外,你这里是为哪一个action配置的?toAdd()方法?
    nowDate = strCurDate;
        projectList = projectService.findUserProject(session.get("pubUser").getUserId());
        return SUCCESS; 
    你在这里查询出projectList来以后是如果让页面获取projectList的值的?怎么直接return了
      

  10.   

    <action name="dailyToAdd" class="dailyAction" method="toAdd">
        <result name="success">/jsp/daily/daily_add.jsp</result>           
    </action> 
    <action name="dailyAdd" class="dailyAction" method="add">
        <result name="success" type="redirect">dailylist.action</result> 
        <result name="input">/jsp/daily/daily_add.jsp</result>          
    </action>
    toAdd是跳转到添加页面的  ADD是添加的在toAdd里面获得的projectList  然后跳到添加页面  这样添加页面的列表不是才能显示出列表内容么
      

  11.   

    toAdd()方法改一下public String toAdd() throws Exception {       
        try{
        nowDate = strCurDate;
        projectList = projectService.findUserProject(session.get("pubUser").getUserId());
        ActionContext.getContext().getSession().put("projectList",projectList);
        return SUCCESS;
        } catch (Exception e) {       
        this.addActionError("操作错误,"+e.toString());
        return ERROR;
        } 
      

  12.   

         在action中配置“validate =true”,在formatbean中验证,重写validate方法。