0

以下は、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 &lt;sf:form tag

何が問題なのですか、どうすれば直せますか?


アップデート:

アクションの場合は次のようになります。

<c:url value="/posts/" /> for create and 
<c:url value="/posts/${post.id}/" /> for update.

次に、最終的なアクションは/appcontext/postsorになります

/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}"/>'}

これは機能しません。

4

1 に答える 1

1

他のタグのプロパティでタグを使用します。は"ネストされています。

これを試して:

 <sf:form method="${post.id == 0 ? 'post' : 'put'}" commandName="post"
          action="${post.id == 0 ? './posts/' : './posts/${post.id}'}">
    ...

    <input type="submit" value="Submit" name="submit" />
    or
    <a href="#" onClick="submit();">submit with link and JavaScript</a>

 </sf:form>


 <c:url value="${post.id == 0 ? './posts/' : './posts/${post.id}'}" var="url">
 </c:url>

 <a href="${url}">Huhu ein Link</a>

使用する場合./は、同じパスを参照します。またはでコンテキストパスを取得することもできrequest.getContextPath()ます。JSP PageServlet

こちらをご覧ください。

> ${post.id == 0 ? '<c:url value="/posts/" />' : '<c:url
> value="/posts/${post.id}"/>'}

これも機能しません。またネストされます。Javaチュートリアルをお読みください。

于 2012-08-31T08:38:13.140 に答える