提交 <s:radio> 个标签选择,其属性与正在显示的标签不同

Submit <s:radio> tag selection with different attribute from the one being displayed

为了简单起见,我将场景定义为: class Person 定义一个对象,其中包含 id (int) 和 name (String) 属性。我创建了一个 List<Person> persons,通过其各自的 Action class 方法 (getPersons()) 加载到 JSP 页面,以填充 <s:radio> 标记。到目前为止,一切都很好,JSP 相应地填充了 <s:radio>。我可以 select 并向操作 class 提交选项(在 JSP 的 <form> 元素中定义)。我的问题是我只能在 <s:radio> 中提交 selected Person 的 name,而我真正想要的是提交 Person 的 [=14] =].我该怎么做?

实际示例: 我在 <s:radio> 列表中有 2 个人,John(ID=1)和 Peter(ID=2)。我想在 <s:radio> 元素上显示他们的名字,但是如果我选择 Peter,我想将 2 提交给操作 class,而不是它的名字。

代码如下:

JSP

<form action="submitData" class="ink-form all-100 small-100 tiny-100" method="post">
    <s:radio label="persons" name="personId" list="persons.{name}" />
</form>

操作class(提交数据操作)

public class SubmitData extends ActionSupport
{
    private String personId;

    public String execute()
    {
        System.out.println("Person ID: "+personId);

        return SUCCESS;
    }

    public void setPersonId(String PersonId)
    {
        this.personId = personId;
    }
}

在 OGNL 中,此 persons.{name} 称为投影,您在 <s:radio> 标签中并不需要它。使用 listKeylistValue 属性来定义将显示列表中的哪些 属性 对象以及提交哪些对象。

<s:radio label="persons" name="personId" list="persons" listKey="id" listValue="name" />

还有一件事。 Person id 是一个 int,您正试图将其提交给 personId,这是一个字符串。当然可以,但考虑将 personId 更改为 int。这样,稍后当您想要从数据库中检索 Person 对象时,您不需要将 String 转换回 int.