Отправить тег <s: radio> с атрибутом, отличным от отображаемого

Для простоты я определю сценарий как: класс Person определяет объект с id (int) и name (String) атрибут. Я создал List<Person> personsкоторые загружаются на страницу JSP с помощью соответствующего метода класса Action (getPersons()), чтобы заполнить <s:radio> тег. Пока все хорошо, JSP заполняет <s:radio> соответственно. Я могу выбрать и отправить опцию в класс действий (определенный в JSP <form> элемент). Моя проблема заключается в том, что я могу предоставить только имя выбранного <s:radio>, когда я действительно хочу представить человека id, Как мне это сделать?

Практический пример: у меня есть 2 человека на <s:radio> список, Джон (с ID=1) и Питер (с ID=2). Я хочу отобразить их имена на <s:radio> элемент, но если я выберу Питера, я хочу представить 2 в классе действия, а не его имя.

Код ниже:

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>

Класс действия (действие submitData)

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

1 ответ

Решение

В огнл это persons.{name} называется проекция, и вам не нужно это в <s:radio> тег. использование listKey а также listValue атрибуты, чтобы определить, какое свойство объектов внутри списка будет показано, а какое отправлено.

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

Еще кое-что. Человек id является int и вы пытаетесь отправить его personId который является строкой. Конечно, это будет работать, но подумайте об изменении personId в int, Таким образом, позже, когда вы хотите получить Person объект из базы данных, вам не нужно конвертировать String обратно в int,

Другие вопросы по тегам