나는이 문제로 벽돌 벽을 얼마 동안 두드려왔다. 검색과 읽기가 아무리해도 답을 찾지 못했다. Spring 포럼에 게시했지만 아무 소용이 없습니다. 아마 여기 누군가가 도울 수 있을까요?스프링 2.5의 주석 기반 컨트롤러를 사용하여 HashMap을 바인딩하는 폼
나는 Spring : form taglib와 Spring : bind를 사용하여 폼에 바인딩 한 HashMap을 포함하는 bean을 가지고있다. 보기에 바인딩은 완벽하게 작동하지만 양식을 제출하고 주석 기반 컨트롤러로 처리하면 바인딩이 올바르게 작동하지 않는 것처럼 보입니다. 예외는 없지만 HashMap은 채워지지 않습니다.
는 JSP :
<form:form method="post" action="updateUserPermissions" modelAttribute="wsPermissions" >
<table>
<tr class="head">
<td>Workspace</td>
<td>Read?</td>
<td>Write?</td>
<td>Manage?</td>
</tr>
<c:forEach var="ws" varStatus="wsItem" items="${selectedUserWSs}">
<c:set var="wsURI" value="'${ws.uri}'"/>
<tr>
<td>${ws.kbInfo.name} @ ${ws.community.name}</td>
<td>
<spring:bind path="wsPermissions.map[${ws.uri}].read">
<input type="checkbox" <c:if test="${status.value}">checked</c:if> disabled="disabled"/>
</spring:bind>
</td>
<td>
<spring:bind path="wsPermissions.map[${ws.uri}].write">
<input type="checkbox" <c:if test="${status.value}">checked</c:if>/>
</spring:bind>
</td>
<td>
<spring:bind path="wsPermissions.map[${ws.uri}].manage">
<input type="checkbox" <c:if test="${status.value}">checked</c:if>/>
</spring:bind>
</td>
<td><a href="removeUserWorkspace?userid=${selectedUser.email}&wsid=${ws.uri}">[Remove]</a></td>
</tr>
</c:forEach>
</table>
<input type="hidden" name="userid" value="${selectedUser.email}" />
<input type="submit" value="Update user permissions" />
</form:form>
이이 작품 바인딩, 체크 박스가 올바른 초기 값을 잘 보여 표시됩니다 여기 내 설정이다. 양식 제출 후,이 제어 방법에 의해 처리된다 :
@RequestMapping
public String updateUserPermissions(@ModelAttribute(value="wsPermissions") WorkspacePermissionMap wsPermissions,
@RequestParam String userid,
HttpServletRequest request, ModelMap modelMap){
// code to update permissions here.....
LOG.debug(wsPermissions.getMap().size());
//the above prints zero
return "redirect:editUser?id="+userid;
}
제어기 방법 디버깅의 HashMap가 비어있는 것을 보여준다.
public class WorkspacePermissionMap {
private Map<String, WorkspacePermission> map = new HashMap<String, WorkspacePermission>();
/**
* @param map the map to set
*/
public void setMap(Map<String, WorkspacePermission> map) {
this.map = map;
}
/**
* @return the map
*/
public Map<String, WorkspacePermission> getMap() {
return map;
}
}
및 WorkspacePermission에 대한 : 여기
는 WorkspacePermissionMap 코드입니다public class WorkspacePermission {
private boolean read = false;
private boolean write = false;
private boolean manage = false;
/**
* @return the write
*/
public boolean isWrite() {
return write;
}
/**
* @param write the write to set
*/
public void setWrite(boolean write) {
this.write = write;
if (write){
setRead(write);
} else {
setManage(write);
}
}
/**
* @return the moderate
*/
public boolean isManage() {
return manage;
}
/**
* @param moderate the moderate to set
*/
public void setManage(boolean moderate) {
this.manage = moderate;
if (moderate){
setWrite(moderate);
setRead(moderate);
}
}
/**
* @param read the read to set
*/
public void setRead(boolean read) {
this.read = read;
if (!read){
setWrite(read);
setManage(read);
}
}
/**
* @return the read
*/
public boolean isRead() {
return read;
}
}
내가 잘못거야 어디 아무도 지적시겠습니까 ? 나는 틀린 나무를 완전히 짖고 있습니까, 아니면 어리석은 실수를 저질렀습니까?
이 필요한 JSP 경로 식에 대한 몇 가지 불확실성이 확실히있다, 당신의 도움을크리스