【发布时间】:2018-05-20 05:29:59
【问题描述】:
我成功实现了一个 bean 使用的 h:selectOneMenu 转换器,但我想使用来自不同 bean 的相同转换器,而不是再次创建相同的转换器。
目前我有:
转换器
@FacesConverter(value = "csiConverter")
public class CsiConverter implements Converter {
@Override
public Object getAsObject(FacesContext ctx, UIComponent uiComponent, String dcId) {
ValueExpression vex =
ctx.getApplication().getExpressionFactory()
.createValueExpression(ctx.getELContext(),
"#{cfgbean}", CfgDbBean.class);
...
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
return ((Csi) o).getCsi();
}
和xhtml
<div class="form-group">
<label>CSI</label>
<h:selectOneMenu id="csi" styleClass="form-control" value="#{cfgbean.csi}" converter="csiConverter">
<f:selectItems var="csival" itemLabel="#{csival.csi} - #{csival.name}" itemValue="${csival}" value="#{cfgbean.csilist}" />
</h:selectOneMenu>
</div>
一切正常。
现在我想在不同的 xhtml 中创建相同的 selectOneMenu 联系不同的 bean 以显示相同的内容。
问题是转换器类内部连接了 bean 引用和 bean 类。(createValueExpression(ctx.getELContext(), "#{cfgbean}", CfgDbBean.class);)
如何避免连接该引用并为所有 Bean 提供通用 csiConverter?
谢谢
【问题讨论】:
-
感谢您的回复,我将尝试创建一个专用 bean 并从所有其他人那里引用它,我想应该比实现所读到的内容更容易。稍后我会分享和评论。
-
我试过了,但它不起作用。所以我们需要在 getasobject 方法中添加一些检查以从不同的 bean 获取对象