Spring + JSPでハイパーリンクを作成する方法
質問
Spring + JSP でハイパーリンクを作成する適切な方法は何ですか?単にコーディングするよりも良い方法があるはずです <a href="...">
鬼ごっこ。たとえば、人物を表示するページを考えてみましょう。URLは people.htm
. 。対応するコントローラーはデータベースからユーザーを取得し、オプションの列の並べ替えを実行します。JSP は次のようになります。
<table>
<tr>
<td><a href="people.htm?sort=name">Name</a></td>
<td><a href="people.htm?sort=age">Age</a></td>
<td><a href="people.htm?sort=address">Address</a></td>
</tr>
...
これはURLとしてはダメな気がします people.htm
JSP にハードコーディングされています。Spring に自動的にビルドさせる方法があるはずです。 <a>
で定義された URL を使用したタグ servlet.xml
.
編集:Spring フォームを使用する必要があるかもしれません。
解決
思い浮かぶのは JSTL 標準タグだけです <c:url>
. 例えば:
<c:url var="thisURL" value="homer.jsp">
<c:param name="iq" value="${homer.iq}"/>
<c:param name="checkAgainst" value="marge simpson"/>
</c:url>
<a href="<c:out value="${thisURL}"/>">Next</a>
これでサーブレット マッピングなどは取得されませんが、何も取得できません。これは実際にプログラムで実行できるものではありません (結局のところ、サーブレットはさまざまな URL にマップできますし、通常は実際にマップします)。しかし、これで逃げ出すことができます。
他のヒント
純粋な Spring ではこの種の機能を見たことがありません (ただし、grails ではそのような機能が提供されています)。
特定のケースでは、ファイル部分を削除し、クエリ文字列のみを href 属性として使用することを検討してください。
<td><a href="?sort=name">Name</a></td>
<td><a href="?sort=age">Age</a></td>
<td><a href="?sort=address">Address</a></td>
これらのリンクは、クエリ文字列を現在の URL のパス コンポーネントに追加します。
リンクを作成するより良い方法は次のとおりです。
<a href="<%=request.getContextPath() %>/people">Name</a>
<%=request.getContextPath() %> は、正しい URI が考慮されることを確認します。
「sort」パラメータは、非表示フィールドを使用して、少しの JavaScript で値を変更できます。
<input type="hidden" name="sort" id="sort" value="name">
コントローラーのメソッドは次のようになります。
@RequestMapping("/people")
public String createUser(String sort) {
...
}
jsp の Spring MVC では、次のようになります。
次のものが使用できます。
一般的なハイパーリンク:
<a href="/Portfolio/login">Click Here</a>
コントローラーから渡す場合:
<a href="/Portfolio/${page}">Click Here</a>
JSPのタグ
<c:url var="URL" value="login">
<c:param name="param" value="${parameter}"/>
</c:url>
<a href="<c:out value="${URL}"/>">Click Here</a>
それが役に立てば幸い..:)
このパッケージを JSP ファイルにインポートします
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
新しいページまたは URL をリダイレクトしたい場合は、たとえばに使用します。
<a href='<c:url value="url of next page" />'>Home</a>