Отправить тег <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
,