2016-12-20 11 views
0

Spring BeanとJSPタグをSpringで何らかの形で統合することは可能ですか? JSPタグとしてSpring Beanを使用していますか?もしそうなら、これは良い/ひどい考えですか?したがって、このようなものは可能でしょう:Spring BeansとJSPタグの統合

@Component 
public class SomeBean extends SimpleTagSupport { 

    @Autowired 
    SomeBean someBean; 

    @Override 
    public void doTag() throws JspException, IOException { 
     getJspContext().getOut().write(someBean.doSomething()); 
    } 
} 

は、私はそれが注入さsomeBeanなかったであろう新しいインスタンスを作成するのではなく、春の豆を使用して取得することtags.tldに何をしますか?それとも別のことですか?

答えて

2

InternalResourceViewResolverを使用すると、エクスポートBeanの説明をjspコンテキストに使用できます。 someBeanはBeanの名前であるあなたは、コンテキストをJSPにエクスポートしたい

... 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
     <property name="exposedContextBeanNames"> 
      <list> 
       <value>someBean</value> 
      </list> 
     </property> 
    </bean> 
    ... 

:あなたは豆のリストを公開したい場合たとえば、あなたはあなたの中にdispatcher-servlet.xml次の方法をビューリゾルバを設定する必要があります。これは、あなたがBeanの名前でJSPコンテキストから豆を春にアクセスすることができます

... 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
     <property name="exposeContextBeansAsAttributes" value="true"/> 
    </bean> 
    ... 

:あなたもすべて春の豆を公開することができます。

は、あなたのタグのハンドラは、次のようになりますとしましょう:

package com.mytags; 
public class SomeTag extends SimpleTagSupport { 

    private SomeBean bean; 

    @Override 
    public void doTag() throws JspException, IOException { 
     getJspContext().getOut().write(bean.doSomething()); 
    } 

    public SomeBean getBean(){...} 
    public void setBean(SomeBean bean){...} 
} 

次にTLDにあなたのタグを説明する次の方法:

... 
<tag> 
    <name>someTag</name> 
    <tag-class>com.mytags.SomeTag</tag-class> 
    <body-content>empty</body-content> 
    <attribute> 
     <name>bean</name> 
     <required>true</required> 
     <rtexprvalue>true</rtexprvalue> 
     <type>com.mybeans.SomeBean</type> 
    </attribute> 
</tag> 
... 

注意、あなたはので、trueとしてrtexprvalueを指定する必要があることあなたはEL式としてタグにbeanを渡します。今、あなたは、JSPでこのタグを使用することができます。

<%@ taglib prefix="mytags" uri="http://mytags.com" %> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
    <head> 
    <title></title> 
    </head> 
    <body> 
    <mytags:someTag bean="${someBean}"/> 
    </body> 
</html> 

しかし、実際には右の直接タグのハンドラからのSpring Beanにアクセスするために、良いアイデアではありません。タグはデータを表示する方法を知っている必要がありますが、このデータを取得する方法から抽象化する必要があります。コントローラで表示したいすべてのデータを準備し、jspにモデルとして渡します。

+0

私が探しているような包括的な答えを書こうとしてくれてありがとう。 – Snickers3192