2015-07-14 5 views
1

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

Практический пример: У меня есть 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> 

класс Action (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

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

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

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

+0

Я попытался использовать как 'listKey', так и' listValue' без успеха (и спасибо за указание 'personId' неправильного типа, btw!). Еще одно сомнение: у меня теперь есть проблема с настройкой значения '' (с атрибутом 'value'). Я использовал метод getDefaultPersonName() 'в классе действия (что-то вроде' value = "defaultPersonName" '), и он работал, но после начала использования этих новых 2 атрибутов он исчез. Знаете ли вы, как я могу это исправить? (и если вы найдете его более подходящим, я могу задать новый вопрос) – jaff

+1

@jaff: теперь вы отправляете 'id' вместо' name', поэтому 'value' также должен быть' id'. –