Tags struts2:param标记不';不要使用转换 问题
在我的struts2应用程序中,我有一个JSP页面,其中显示书籍列表。每本书都有一个id和名称。此外,我想把一个链接“编辑”旁边的任何书籍,它可以由当前用户编辑。这个“编辑”链接应该调用相应的操作,将图书id作为参数传递给它。因此,我使用以下代码实现了此页面:Tags struts2:param标记不';不要使用转换 问题,tags,struts2,type-conversion,Tags,Struts2,Type Conversion,在我的struts2应用程序中,我有一个JSP页面,其中显示书籍列表。每本书都有一个id和名称。此外,我想把一个链接“编辑”旁边的任何书籍,它可以由当前用户编辑。这个“编辑”链接应该调用相应的操作,将图书id作为参数传递给它。因此,我使用以下代码实现了此页面: <table> <s:iterator value="books" status="stat"> <tr> <td><s:propert
<table>
<s:iterator value="books" status="stat">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td>
<s:if test="canEdit[#stat.index]">
<s:a action="editBook">edit
<s:param name="bookId" value="id"/>
</s:a>
</s:if>
</td>
</tr>
</s:iterator>
</table>
my.app.Id
是一个抽象类,由book Id类扩展
为单个条目列表呈现JSP的结果如下:
<table>
<tr>
<td>8</td>
<td>Book 01</td>
<td><a href="/web/editBook.action?bookId=id%288%29">edit</a></td>
</tr>
</table>
8.
第01册
id%288%29
是字符串id(8)
的转义版本,它是int值为8的id的toString()
方法(在基本抽象类my.app.id
中定义)的结果。
标记用于“简单”参数。在这种情况下,您可以只使用
设置一个临时值,如果这样做可以实现预期的转换
它使用图书id的
toString
,因为这就是getId()
在渲染时将打印出来的内容,就像您使用System.out.println(book.getId())
找到相应的问题并解释问题一样:
简单地说,区别在于指定
和指定
之间。转换仅用于第二种情况。谢谢,戴夫。但我还是不明白这背后的意思。param
和property
都用于将对象转换为字符串(param api文档明确指出了这一点)。这种转换的逻辑应该由我通过转换器来控制。所以我认为,至少param标记用于“简单”参数这一点并不明显。这里我缺少什么?在调试了org.apache.struts2.components.Property
和org.apache.struts2.components.Param
之后,我发现它们之间的区别在于第一个使用ValueStack的findValue(String,Class,boolean)
,而第二个使用findValue(String)基本组件的
,最终将我们带到ValueStack的查找值(字符串,布尔值)。缺少Class-toClass
参数(对于属性标记,该参数等于String.Class
)将导致忽略转换器。因此,似乎忽略/使用转换器是嵌入在框架中的一个特性。更令人困惑的是。
<table>
<tr>
<td>8</td>
<td>Book 01</td>
<td><a href="/web/editBook.action?bookId=id%288%29">edit</a></td>
</tr>
</table>