以下是创建或更新Post对象的表单(我也使用spring form标签):
<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
或
/appcontext/posts/1
UPDATE2:
我可以使用:
${post.id == 0 ? '/posts/' : '/posts/${post.id}'}
但是,请注意网址中的“/”,它将与主机相关。
也就是说,表单操作将是:
http://localhost/posts
虽然我希望它是:
http://localhost/context/posts
这就是为什么我使用<c:url>
来为我添加上下文。
我想这样:
${post.id == 0 ? '<c:url value="/posts/" />' : '<c:url value="/posts/${post.id}"/>'}
哪个不起作用。
答案 0 :(得分: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 Page
中的Servlet
获取上下文路径。
看看here。
> ${post.id == 0 ? '<c:url value="/posts/" />' : '<c:url
> value="/posts/${post.id}"/>'}
这也行不通,它也会再次嵌套。请阅读Java Tutorial。