以下は、Post オブジェクトを作成または更新するためのフォームです (Spring フォーム タグも使用します)。
<sf:form method="<c:choose><c:when test="${post.id==0}">post</c:when><c:otherwise>put</c:otherwise></c:choose>" commandName="post">
Title:<sf:input path="title" /><sf:errors path="title" /><br />
Body:<sf:textarea path="body" cols="70" rows="6" /><sf:errors path="body" /><br />
</sf:form>
の場合はpost.id==0
、この投稿が作成されることを意味しますが、フォームのメソッドは「POST」である必要があります。それ以外の場合は更新され、メソッドは「PUT」になります。
しかし、上記のコードは例外を引き起こします:
org.apache.jasper.JasperException: /WEB-INF/jsp/posts/_form.jsp (line: 5, column: 41) Unterminated <sf:form tag
何が問題なのですか、どうすれば直せますか?
アップデート:
アクションの場合は次のようになります。
<c:url value="/posts/" /> for create and
<c:url value="/posts/${post.id}/" /> for update.
次に、最終的なアクションは/appcontext/posts
orになります
/appcontext/posts/1
update2:
アクションについては、次を使用できます。
${post.id == 0 ? '/posts/' : '/posts/${post.id}'}
ただし、これは URL の「/」に注意してください。これは、ホストに対して相対的になります。
つまり、フォーム アクションは次のようになります。
http://localhost/posts
私はそれをしたいが:
http://localhost/context/posts
その<c:url>
ため、コンテキストを追加してくれるものを優先します。
そして、私はこの方法が欲しい:
${post.id == 0 ? '<c:url value="/posts/" />' : '<c:url value="/posts/${post.id}"/>'}
これは機能しません。