JSF & Webflow -преобразование проблем - PullRequest
0 голосов
/ 29 апреля 2011

В JSF у меня есть это:

<h:selectManyListbox id="createAccountBasicInfo_select_Types"
 styleClass="selectManyCheckbox" value="#{party.roles}" size="6"
 converter="persistenceObjectToStringTwoWayConverter">
      <f:selectItems value="#{accTypes.selectItems}" />
</h:selectManyListbox>

Мой конвертер:

 //[...]
 import javax.faces.convert.Converter;
 //[...]

public class PersistenceObjectToStringJSFConverter implements Converter {
    //[...]

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Long id = Long.valueOf(value);
    Object object = null;
    try {
        object = getPersistenceService(context).loadByEntityId(id); // here I load the appropriate record
    } catch (CoreException e) {
        e.printStackTrace();
    } catch (ElementCreationException e) {
        e.printStackTrace();
    }
    return object; //here I need to return an ArrayList of the loaded Objects instead of a single object
}
 }

В HTML я получаю это:

<select id="form_party:createAccountBasicInfo_select_Types"
 name="form_party:createAccountBasicInfo_select_Types" class="selectManyCheckbox" 
 multiple="multiple" size="6"> 
  <option value="171128">Andere</option>
  <option value="171133">Interessent</option>
  <option value="171130">Kunde</option>
  <option value="171131">Lieferant</option>
  <option value="171134">Mitarbeiter</option>
  <option value="171132">Mitbewerber</option>
  <option value="171129">Partner</option>
</select>

Значениекаждая опция является идентификатором, который я должен загрузить из базы данных.ArrayList выбранных записей будет затем передан в WebFlow и затем сохранен в базе данных.

Когда я нажимаю кнопку «Сохранить», выбранные элементы запускаются через конвертер, где мне нужно загрузить элементыиз базы данных (по значению, например "171128") и добавьте его в ArrayList, который будет вставлен в "party.roles" (проверьте код JSF).

Моя проблема: я получаю следующее исключение JSF:

/WEB-INF/page/core/fragments/account/accountBasicInfo.xhtml @152,58 value="#{party.roles}": Property 'roles' not writable on type java.util.List

Я думаю, что проблема с моим конвертером.Что мне нужно изменить?

Спасибо за ваши ответы!

(я использую JSF 1.2)

1 Ответ

2 голосов
/ 29 апреля 2011

Исключение говорит о том, что #{party} на самом деле java.util.List, который, в свою очередь, действительно не имеет setRoles() метода, поэтому #{party.roles} не будет работать.

#{party} должен быть управляемым компонентом и иметь свойство private List<Role> roles с геттером.Преобразователь не должен возвращать List<Role> на getAsObject(), но должен возвращать Role.

...