在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,然后保存到数据库中。
当我按下"保存"按钮时,所选项目会通过转换器运行,我需要从数据库中加载项目(按值,例如"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
属性。转换器不应在getAsObject()
上返回List<Role>
,但应返回Role
。