Tags struts2:param标记不';不要使用转换 问题

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

在我的struts2应用程序中,我有一个JSP页面,其中显示书籍列表。每本书都有一个id和名称。此外,我想把一个链接“编辑”旁边的任何书籍,它可以由当前用户编辑。这个“编辑”链接应该调用相应的操作,将图书id作为参数传递给它。因此,我使用以下代码实现了此页面:

<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>