2

私はSpringに比較的慣れていないので、次のことを達成しようとしています。

「id」と「name」の2つの列を持つデータベーステーブルに果物のリストがあるとします。リストを表示するページを作成し、各果物の横に[削除]ボタンを配置したいと思います。それは簡単にできると思いましたが、理解できず、これを説明するチュートリアルも見つかりません。

これは私が今持っているものです:

意見:

<c:forEach items="${fruits}" var="fruit">
    <tr>
        <td><c:out value="${fruit.name}" /></td>
        <sec:authorize access="hasRole('admin')">
            <td>
                <a href="<c:url var="deleteUrl" value="/fruit/remove.html"/>">DELETE</a>
                <form id="${fruitFormId}" method="POST">
                    <input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
                </form>
            </td>
        </sec:authorize>
    </tr>
</c:forEach>

次に、コントローラー:

@Controller
public class FruitController{

    @Autowired
    private FruitManager fruitManager;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getFruits(ModelMap model) {
        model.addAttribute("fruits", this.fruitManager.getFruits());
        return "list";
    }

    @RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
    public String removeAd(Fruit fruit) {
        fruitManager.removeFruit(fruit);
        return "/list";
    }

私は今、「良くてきれいな」方法を使用しているのかどうかさえわかりません。もしあれば、慣例に従って、この「正しい方法」を達成したいと思います。

4

2 に答える 2

8

2つの小さな問題を除いて、コードは正しいfruitですfruitId。-リンクの代わりに送信ボタンのあるHTMLフォームが必要です

したがって、コントローラーを少し修正する必要があります。

@RequestMapping(value = "/fruit/remove", method = RequestMethod.POST)
public String removeAd(@RequestParam("fruit") long fruitId) {
    Fruit fruit = fruitManager.loadById(fruitId);
    fruitManager.removeFruit(fruit);
    //or
    fruitManager.removeFruitById(fruitId);
    return "redirct:/list";
}

次に、POSTの後にリダイレクトすることをお勧めします(リストページを直接返すのではなく)。そうすれば、ユーザーが果物を削除した後にブラウザーの更新ボタンを押しても問題はありません。

HTMLのものについては、削除確認メッセージが必要な場合を除いて、JQueryやJavaScriptは必要ありません。

<c:url var="deleteUrl" value="/fruit/remove.html"/>    
<form id="${fruitFormId}" action="${deleteUrl}" method="POST">
      <input id="fruit" name="fruit" type="hidden" value="${fruit.id}"/>
      <input type="submit" value="delete" onClick="return confirm('sure?')"/>
</form>
于 2012-10-28T08:39:05.367 に答える
0

それは簡単です、相棒。Jqueryなどを使用してajax関数を削除ボタンにバインドするだけですが、最初に、プロジェクトがtomcatで正常に実行できることを確認したいと思います。私があなたのコードで見つけた問題の1つは、メソッドremoveAd(Fruitfruit)です。httpを使用してオブジェクトFruitを渡すことができ、フルーツのIDを取得できます。メソッドをremoveAd(String id)に変更します。このメソッドでは、reqest.getParameter()を使用して値を取得できます。これは私がお勧めするチュートリアルです:http ://www.ibm.com/developerworks/web/library/wa-spring3/index.html 。

于 2012-10-28T04:51:57.090 に答える