在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>


每个选项的值都是一个Id,我必须从数据库中加载它。
然后,将所选条目的ArrayList提供给WebFlow,然后保存到数据库。

当我按下“保存”按钮时,选定的项目将通过Converter运行,在那里我需要从数据库中加载这些项目(按值,例如“ 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)

最佳答案

例外是说#{party}实际上是java.util.List,而实际上又没有setRoles()方法,因此#{party.roles}无法正常工作。

#{party}应该是托管bean,并且应该具有带有getter的private List<Role> roles属性。转换器不应在List<Role>上返回getAsObject(),但应返回Role

07-24 09:49
查看更多