0

シナリオは次のとおりです。

  1. コントローラーは、利用可能なブランド (CrudRepository、データベース) のリストを準備します。List<PortalBranding>
  2. このリストは、ModelMap 属性として表示されます。
  3. を使用してリストを表示form:select

      <form:select path="branding">
            <form:option value="-" label="--Please Select"/>
            <form:options items="${brandingList}" itemValue="id" itemLabel="name"/>
      </form:select>
    
  4. 選択すると、デフォルトで、PortalBranding オブジェクトに変換したい文字列として値を送信しようとします。そこで@InitBinder、カスタム エディターを登録できるメソッドを追加しました。

    public class PortalBrandingEditor extends PropertyEditorSupport { ... }
    

    しかし、ID でオブジェクトをロードするサービスにアクセスできるようにしたい場合は、Spring に何らかの注釈に基づいてインスタンスを作成してもらいたい (このエディター内に @Autowired フィールドを配置します)。それは良い方法ですか?それに最適な注釈は何ですか?いくつかの提案を楽しみにしています。

4

2 に答える 2

0

私は今のところ実用的な解決策を見つけました。

Editor クラスで新しい PortalBranding を作成し、ID を設定するだけです。したがって、ポータルには、存在する ID を持つブランディングがあります。残りは Persistance (Hibernate) によって行われます。

しかし、まだ他の解決策を楽しみにしています:)。

于 2013-11-14T13:27:45.353 に答える
0

必要なのは、Spring のConversionService. 参照は次のとおりです。http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert

Converter次のように実装するだけです。

public class StringToPortalBrandingConverter implements Converter<String, PortalBranding> {

    @Inject // or @Autowire
    SomeService someService; // Some service or other dependency you need.

    @Override
    public PortalBranding convert(String source) {
        // Do your conversion from 'source' to 'PortalBranding' here.
        // You can make use of your injected 'someService' as well.
        ...
        return portalBranding;
    }
}

次に、カスタム コンバーターについて Spring に伝える必要があります。

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="yourpackage.StringToPortalBrandingConverter"/>
        </set>
    </property>
</bean>

それだけです。

于 2013-11-14T16:40:39.310 に答える