2009-07-08 15 views
1

私はしばらくの間この問題のレンガの壁に当たっていましたが、検索と読書の量は答えになりませんでした。私はSpringのフォーラムに投稿しましたが、無駄です。多分ここの誰かが助けることができますか?Spring 2.5で注釈ベースのコントローラを使用してHashMapをバインドするフォーム

私は、Spring:formタグライブラリと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> 

これは作品を結合、細かい表示し、チェックボックスが正しい初期値を示しています。フォーム送信は、このコントローラメソッドによって処理されます。コントローラメソッドをデバッグすると、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のパス式にいくつかのすごみは間違いなくあります

クリス

答えて

2

、あなたの助けをいただき、ありがとうございます。

私が使用しているハードコードされた値:

applicationDetails['first_name'] 

たり、例えば:

wsPermissions.map['hardcodeduri'].read 

私のためにこれらの作業罰金。

私のアドバイスは、最初にハードコードを試してから、これを変更して動的変数を使用できるかどうかを確認することです。

1

どのようにHTMLチェックボックス要素に名前または値属性がないのですか?春はあなたのために「すべて」の魔法をするはずではありません;)

関連する問題