5

Spring3.2をApacheTilesで使用しています。Rooを使用して多くのサービスクラスを生成しました。jspテンプレートに変数を挿入する簡単な手順を試しています。その部分は正常に機能しますが、サービスBeanを参照する必要がある時点で立ち往生しています。

@Component
public class CustomViewPreparer implements ViewPreparer {

@Autowired
UserProfileService ups;

@Override
public void execute(TilesRequestContext tilesContext,
                    AttributeContext attributeContext) {

       Authentication a = SecurityContextHolder.getContext().getAuthentication();
       String name = a.getName(); //get logged in username

       UserProfile up = ups.findByUsername(name);
       //request.setAttribute("isLoggedIn", up!=null);

    }
}

UserProfileServiceの「ups」は常にnullです。私はこれを見つけました: http: //forum.springsource.org/showthread.php ?48950-ViewPreparer-is-triggered-before-Session-starts

しかし、私はその反応を理解していません。ビューを返すたびに変数を挿入することでこれを回避できますが、他の人がこの問題をどのように解決したのか興味があります。

4

2 に答える 2

4

同じ問題がありました。その理由は、Spring Bean から UserProfileService インスタンスを取得するように Tiles に指示する必要があるためです。

したがって、 TilesConfigurer で、インジェクションにSpring Beanを使用するように明示的に要求するには、それを行う必要があります:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
    <list>
     .....
    </list>
  </property>

  <!-- resolving preparer names as Spring bean definition names -->
  <property name="preparerFactoryClass"
       value="org.springframework.web.servlet.view.tiles2.SimpleSpringPreparerFactory "/>

</bean>

構成の詳細については、こちらを参照してください: http://static.springsource.org/spring/docs/2.5.x/reference/view.html

于 2013-09-03T09:30:22.933 に答える