データベースからリストに取り込まれた一連のデータがあります。
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 に再度保存できるようにする方法。この種の状況を処理するための他のアプローチはありますか?
私を助けてください。