h:selectOneMenu
のコンバーターを1つのBeanで使用して実装しましたが、同じコンバーターを別のBeanから作成する代わりに、別のBeanから同じコンバータを使用します。異なる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に連絡したいと考えています。
問題は、Converterクラス内のBean参照およびBeanクラスをケーブルで接続されていることである。(createValueExpression(ctx.getELContext(), "#{cfgbean}", CfgDbBean.class);
)
そのリファレンスケーブルに回避し、すべてのBeanのための一般的なcsiConverter
を持つことができますどのように?
おかげ
[JSF 2のカスタムコンバータの引数付きのカスタムコンバータ]の可能な複製(https://stackoverflow.com/questions/11613134/custom-converter-in-jsf-2-with-arguments) –
返信いただきありがとうございます。専用のBeanを作成して他のすべてのBeanを参照するには、読みやすいものを実装する方が簡単だと思います。 私は後で共有し、コメントします。 –
私はしようとしたが動作していない。オブジェクトを別のBeanから取得するには、getasobjectメソッドにチェックを追加する必要があります。 –