2011-12-27 9 views
0

同じEL式${taskId}は、異なる場所で2つの異なる値を示します。不一致の表現言語の振る舞い、同じ表現の異なる値

私はMongoDBとObject-Mapping(もちろんJava/JSP/etc)用のMorphiaと一緒にStripesフレームワークを使用しています。次のJSP /式言語コード使用

<c:forEach items="${actionBean.tasks}" var="listTask"> 
<c:set var="taskId" scope="page" value="${listTask.id}"/> 
<s:form method="post" beanclass="action.TaskActionBean"> 
    ${taskId}<s:hidden name="task.id" value="${taskId}"/> 
    <s:submit name="promoteTask" value="Up" /> 
</s:form> 
</c:forEach> 

は、次の生成されたコードを与える:あなたは$を見ることができるように、{のtaskId}は、4ef99b730364de7ec70dbd68、その後4ef99b6c0364de7ec70dbd67をプリントアウトされ

<form method="post" action="/scrumyogi/"> 
    4ef99b730364de7ec70dbd68 
    <input type="hidden" value="4ef99b6c0364de7ec70dbd67" name="task.id"> 
    <input type="submit" value="Up" name="promoteTask"> 
    <div style="display: none;"> 
     <input type="hidden" value="NPNEJw6tUWfRBXf-vVOLTw==" name="_sourcePage"> 
     <input type="hidden" value="XbfUDiSHGrU=" name="__fp"> 
    </div> 
</form> 

ました私には意味がない、私は同じ値を印刷する$ {taskId}が必要4ef99b730364de7ec70dbd68は正しいものです。

これを引き起こす可能性のある既知の問題はありますか?

EDIT:実際の問題は、隠れたフォームタグ内の$ {taskId}が正しくないことです。他の値を表示して式が何を含んでいるかを確認した後、真剣に混乱している。

ActionBeanコード:

@UrlBinding("/") 
public class TaskActionBean extends BaseActionBean{ 

    String taskId; 
    Task task = new Task(); 
    List<Task> tasks; 

    public final static String DISPLAY = "/index.jsp"; 

    @DefaultHandler 
    public Resolution listTasks(){ 
     tasks = Dao.datastore().find(Task.class).order("rank").asList(); 
     return new ForwardResolution(DISPLAY); 
    } 


    public Resolution promoteTask(){ 

     task.promoteTask();  
     tasks = Dao.datastore().find(Task.class).order("rank").asList(); 

     return new ForwardResolution(DISPLAY); 
    } 



    // ... getters and setters 
+0

コードはスニペット化されていますが、私は他のコードは関連していないと思っていますが、これで十分でない場合はさらに含めることができます。 – Ankur

+0

アクションビーンコードを投稿してください。 – soulcheck

+0

当分、私はオブジェクトを使ってこれを解決しましたが、誰かが知っている限り、ここで何が起こっているのか理解したいと思っています。 – Ankur

答えて

0

あなたは、アクションBean内のtaskIdフィールドを持っている、とstripes taglib documentationに従って:

隠されたタグは、次の順序でスキャンすることにより、value属性を割り当てます。

  1. HttpServletで同じ名前の1つ以上の値Stringにボディコンテンツを崩壊することにより、同じ名前のActionBeanに要求フィールド

  2. (Beanインスタンスが存在する場合)

  3. 、体が存在する場合

  4. を参照EL式の結果はタグのvalue属性に格納されます。

だから、おそらくあなたのアクションBean内のフィールドを検索し、そこから値をとります。

他の(jsp el)${taskId}は、タスクリスト要素から割り当てられます。

taskIdを、あなたのアクションBeanフィールドと一致しない名前に変更してください。動作するはずです。

関連する問題