2017-05-05 101 views
1

我正在使用java中的tapestry,並且我在tml文件中有一個循環,每行都有一個按鈕。當點擊按鈕時,我需要將行中元素的值傳遞給onSuccess()方法。 我試過t:context =「value」,但它不起作用,我找不到解決方案。將值傳遞給方法onSucces

TML:

<tr t:type="Loop" t:source="movieList" t:value="movie"> 
    <td> 
     <a href="#" t:type="PageLink" t:page="index"> 
      ${movie.title} 
     </a> 
    </td> 
    <td> 
     ${movie.score} 
    </td> 
    <td> 
     <form t:type="Form" class="form-horizontal" t:id="deleteMovie"> 
      <button type="submit" t:context="movie.movieId" class="btn btn-primary"> 
       <img src="${context:i/basura.png}" width="25" heigth="25"/> 
      </button> 
     </form> 
    </td> 
</tr> 

Java方法:

@OnEvent(value = "success", component ="deleteMovie") 
Object[] onSuccesFromDeleteMovie(Long movieId) throws InstanceNotFoundException { 
    movieService.removeMovie(movieId); 
    return new Object[] {startIndex}; 
} 

回答

0

它 「不工作」,因爲你的button是一個普通的HTML按鈕,而不是一個Tapestry組件。在這種情況下,t:context將呈現爲純HTML屬性,您可以通過檢查結果HTML來驗證該屬性。

爲了讓Tapestry知道你的按鈕實際上是一個掛毯Submit組件,您可以將t:添加前綴type屬性,即:

<button t:type="submit" t:context="movie.movieId" ... />

預見到你的下一個問題:從事件返回Object[]處理程序將不起作用,因爲它不是一個supported method return value.

對於這樣一個簡單的用例,你可以使用普通EventLink上下文,你不必提交一個fo rm觸發服務器端事件處理程序。

也許這個JumpStart's AjaxFormLoop example會有幫助,如果你決定在某些時候使用Ajax。