Spring 3.0 und JSF2

Webapp mit Spring3 und JSF2

Singleton oder nicht?

HelloWorldBean verwendet MyReverseService

Annotation:

@javax.inject.Named
@javax.faces.bean.RequestScoped
public class HelloWorldBean
{
    private String name = "";

    @javax.inject.Inject
    private MyReverseService service;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public void setService(MyReverseService service)
    {
        this.service = service;
    }

    public String getReverseName()
    {
        return service.reverse(name);
    }
 }
public interface MyReverseService
{
    public String reverse(String name);
}
@javax.inject.Named
@javax.faces.bean.ApplicationScoped
public class MyReverseServiceImpl implements MyReverseService
{
    public String reverse(String name)
    {
        return new StringBuffer(name).reverse().toString().toLowerCase();
    }
}

ExpressionLanguage greift auf HelloWorldBean zu

<h:form id="reverseForm">
    Input: <h:inputText id="name" value="#{helloWorldBean.name}" />
    <h:commandButton id="submit" type="submit" action="spring" />
</h:form>
Reverse: <h:outputText id="reverse" value="#{helloWorldBean.reverseName}" />

Problem:

HelloWorldBean wird ein Singleton, da Spring wohl den javax.faces.bean.RequestScoped nicht unterstützt.

Lösung 1:

Eine von Spring unterstützte Annotation:

@org.springframework.context.annotation.Scope(value="request")

Lösung 2:

XML-basierte Spring-Configuration (Vorteil: es können alle Annotations gelöscht werden und somit sind alle Klassen wieder POJOs (Plain Old Java Objects):

    <bean
        id="helloWorldBean"
        class="bean.HelloWorldBean"
        scope="request">
        <property
            name="service"
            ref="myReverseServiceImpl" />
    </bean>

    <bean
        id="myReverseServiceImpl"
        class="service.impl.MyReverseServiceImpl"
        scope="singleton" />

 

This entry was posted in JavaServer Faces, Springframework and tagged , . Bookmark the permalink.