0

データベースからリストに取り込まれた一連のデータがあります。

List<ManageJob> contentList = jdbcTemplate.query(jobListQuery, new RowMapper() { 
public ManageJob mapRow(ResultSet rs, int rowNum) throws SQLException { 
ManageJob job = new ManageJob(); 
job.setContentId(rs.getString(1)); 
job.setContentName(rs.getString(2)); 
job.setContentPath(rs.getString(3)); 
return job; 
} 
});

form.setContentList(contentList); 

それらをjspの異なるテキストボックスに表示します。

<c:forEach items="${ManageJobForm.ContentList}" var="ContentList" >
<label for="${ContentList.contentId}">${ContentList.contentName}</label>
<input type="text" class="textboxStyle" name="${ContentList.contentId}"       value="${ContentList.contentPath}" /> 
</br></br> 

コンテンツ パスを変更して保存します。これで、フォーム Bean が付属するはずです。しかし、フォーム Bean リストは Null ポインターをスローしています。

FormBean (ManageJobForm) は、

private List<ManageJob> ContentList; // with setter getter

spring mvc 3でこれらのフィールドの値をformbeanに取得する方法を教えてください。


DAOレイヤーで発生するデータベースからのリストに最初に入力されたデータ。DAO はサービス層に注入され、最後にサービスはコントローラーに注入されます。リストが入力されているDAO、サービス、およびコントローラーを調べてください。

JobDAOImpl.java,

    public List<Content> getJobContentList(String source, String storeType, String  contentType, int langId){

    List<Content> contentList;

    String contentListSql = "SELECT CON.CONTENT_ID, CON.CONTENT_NAME, CON.CONTENT_PATH FROM CONTENT CON " +
        "WHERE CON.STORE = ? AND CON.LANG_ID = ? AND CON.INSTANCE_TYPE = ? AND CON.CONTENT_TYPE = ?";

    contentList = jdbcTemplate.query(contentListSql, 
             new Object[] { storeType, langId, source, contentType}, 
          new RowMapper(){ 

            public Content mapRow(ResultSet rs, int rowNum) throws SQLException { 
                Content job = new Content(); 
                job.setContentId(rs.getString(1)); 
                job.setContentName(rs.getString(2)); 
                job.setContentPath(rs.getString(3)); 
                return job; 
            } 
          });


    return contentList;
}

JobServiceImpl.java,

    @Autowired
    public JobDAO dao; 

    public List<Content> getJobContents(String jobName, String source, String contentType){

    String[] strArray = jobName.split(" ");
    String storeType = strArray[0];

    int langId = 0;

    List<Content> dataList;

    if(storeType != null && storeType.equalsIgnoreCase("US")){
        langId = -1;

        dataList = dao.getJobContentList(source, storeType, contentType, langId);

    }else if (storeType != null && storeType.equalsIgnoreCase("CA")){
        langId = 1;

        dataList = dao.getJobContentList(source, storeType, contentType, langId);

    }

    return dataList;
}

ManageJobsController.java、

    @Autowired
public JobService jobService;

    List<List> creativeContentList = jobService.getJobContents(bean.getJobName(), instance, "Creative");

    bean.setCreativeContentList(creativeContentList.get(0));


    model.addAttribute("jobName", bean.getJobName());

これで、CreativeContentList にデータの準備が整い、jsp ページで反復して値を取得できます。したがって、ConfigContent.jsp では、

<form:form method="POST" action="ConfigureJobController.do" commandName="ManageJobForm" >
<div class="subTopic hide" id="tab2">
    <c:forEach items="${ManageJobForm.creativeContentList}" var="creativeContentList" >

        <label for="${creativeContentList.contentId}">${creativeContentList.contentName}</label>

        <input type="text" class="textboxStyle" name="${creativeContentList.contentId}"                                 value="${creativeContentList.contentPath}" /> 

        </br></br> 
    </c:forEach>        
</div>
<input type="Submit" class="buttonStyle" name="saveBtn" value="Save" />

ここで、コンテンツ パスにいくつかの変更を加えて、保存しようとします。しかし、コントローラから formbean のcreativeContentList にアクセスすると、リストが空になります。JobConfigController.java を確認し、

@Controller
@RequestMapping(value="/ConfigureJobController.do")
public class JobConfigController {

@RequestMapping(params="saveBtn", method=RequestMethod.POST)
public String saveConfiguration(ModelMap model, @ModelAttribute(value="ManageJobForm") ManageJobForm                            bean, BindingResult result){

    List<Content> creativeSiteContent = bean. getCreativeContentList ();

    //Getting null list here
    if(null != creativeSiteContent && creativeSiteContent.size() > 0){
        for (Content cont : creativeSiteContent) {  

            System.out.println("Hiiiiiiiiiiiiiiiiii in config controller " + cont.getContentId());
        }
    }

    return "ConfigContent";

}

formbean の CreativeContentList に新しい入力値を入力して、db に再度保存できるようにする方法。この種の状況を処理するための他のアプローチはありますか?

私を助けてください。

4

0 に答える 0