struts2:param标签不使用转换

时间:2011-11-29 10:54:48

标签: tags struts2 type-conversion

问题

在我的struts2应用程序中,我有JSP页面,其中显示了书籍列表。每本书都有一个id和名字。另外,我想在任何书籍旁边放置一个“编辑”链接,可以由当前用户编辑。此“编辑”链接应调用相应的操作,将book 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>

图书ID不是基本类型,我使用自定义类。所以我决定实现自己的转换器。 问题就出现了:在上面的代码中,转换器仅在评估标记<s:property value="id"/>时使用,但不用于评估<s:param name="bookId" value="id"/>。而是使用了书籍id类的toString()方法。为什么<s:param>不使用我的转换器?我如何强迫它这样做?或者也许还有另一种方法可以将book id作为参数传递给链接?

一些(可能无用的)细节

要配置转换器,我将xwork-conversion.properties放在/src/main/resources/文件夹中,其中包含以下内容:

my.app.Id = my.app.struts.IdConverter

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>

id%288%29是字符串id(8)的转义版本,它是toString()方法(在基本抽象类my.app.Id中定义)的结果,其id为int值为8。

2 个答案:

答案 0 :(得分:1)

<s:param>标记用于“简单”参数。在这种情况下,您可以使用<s:property>设置临时值,如果这样做了您期望的转化。

它使用了图书ID的toString,因为这是getId()在呈现时会打印出来的内容,就像您执行System.out.println(book.getId())一样。

答案 1 :(得分:0)

发现相应的问题解释问题: http://jira.opensymphony.com/browse/WW-808

简而言之,指定<param value="myValue"/>和指定<param><property value="myValue"/></param>之间存在差异。转换仅在第二种情况下使用。