0

控制器

 @RequestMapping(value = "/chartofaccount", method = RequestMethod.GET)
public String getChartofAccount(Model model) {

    try {

        List CoaCategoryList = new ArrayList();
        COACategoriesModel obj;
        List<COACategoriesModel> getCoaCategoryList = coaCategoriesService
                .getAllCOACategories();

        if (getCoaCategoryList.size() > 0) {
            for (int i = 0; i < getCoaCategoryList.size(); i++) {

                obj = getCoaCategoryList.get(i);
                CoaCategoryList.add(obj.getId());
                CoaCategoryList.add(obj.getName());
                model.addAttribute("list", CoaCategoryList);

            }
        }

    } catch (Exception ex) {
        log.error("Exception.." + ex);

    }

    return "fin/coa";
}

鳍/coa.jsp

<ct:Select setIdentity="coaCategoryId" list="${list}" selected="0" />

上面的列表成功填充,在我的自定义标签中。

but 

另一个控制器

    @RequestMapping(value = "/addCoaMaintenance", method = RequestMethod.POST)
public String addCoaCategory(
        @RequestParam("mainAccount") long mainAccount,
        @RequestParam("subAccount") long subAccount,
        @RequestParam("accountName") String accountName,
        @RequestParam("coaCategoryId") long coaCategoryId,
        @RequestParam("postingType") int postingType,
        @RequestParam("typicalBalance") int typicalBalance,
        @RequestParam("isActive") int isActive,
        Model model) {

     Date sysdate = null;
     String Message="";

     try{

     sysdate = new Date();

     Message="Operation Fail!";
     COAMaintenanceModel coaMaintenanceModel= new COAMaintenanceModel(mainAccount, subAccount, accountName, coaCategoryId, postingType, typicalBalance, isActive, GetSessionValue.getSysUserId(), GetSessionValue.getSysUserIp(), sysdate, 0);
     coaMaintenanceService.AddCOAMaintenance(coaMaintenanceModel);

     Message="Account Save Successfully";
     model.addAttribute("result_success", Message);

     }catch(Exception ex){
         log.error("Exception.."+ex);
         model.addAttribute("result_fail", Message);
     }



     return "fin/coa";

    }

作为第二个控制器返回fin/coa.jsp,列表为空。如何控制这个?我正在使用spring Mvc + hibernate。在我需要之前,如何使第一个控制器列表可用。

4

2 回答 2

1

我不确定我是否正确理解了这个问题,但是,按照我的看法,您没有在第二个处理程序方法/控制器中包含模型中的列表。

两个处理程序方法(@RequestMapping 注释方法)是否在同一个控制器类中?如果是,一种解决方案是在填充列表的方法上添加@ModelAttribute。例如,您将添加以下内容:

@ModelAttribute("list")
public List getCategoryList() {
    List CoaCategoryList = new ArrayList();
    COACategoriesModel obj;
    List<COACategoriesModel> getCoaCategoryList = coaCategoriesService
            .getAllCOACategories();
    // this if is unncessary
    // if (getCoaCategoryList.size() > 0) {
    for (int i = 0; i < getCoaCategoryList.size(); i++) {
        obj = getCoaCategoryList.get(i);
        CoaCategoryList.add(obj.getId());
        CoaCategoryList.add(obj.getName());            
    }    
    return CoaCategoryList;
}

这将使该控制器中所有请求的模型中的属性“列表”可用,您无需通过 model.addAttribute(...) 添加它。

其他解决方案是在每个处理程序中手动填充列表并将其手动添加到模型中(您已经为第一个处理程序方法这样做了,但在第二个处理程序方法中没有这样做)。

如果处理程序方法不在同一个控制器类中,那么您需要在渲染视图之前再次确保列表在模型中(通过使两个控制器类扩展一个公共抽象控制器,您是否添加了填充列表的功能,或者手动填充模型,或其他方式)。

PS。另外,请考虑查看“Java 编程语言的代码约定”(例如,Java 中的变量名通常以小写字母开头以区分它们与类名)http://www.oracle.com/technetwork/java/codeconv- 138413.html

于 2013-04-02T11:25:39.043 回答
0

一种解决方案:测试您的列表是否为空或为空

<c:if test="${not empty list}">
   <ct:Select setIdentity="coaCategoryId" list="${list}" selected="0" />
</c:if>
于 2013-04-02T09:39:37.717 回答