Весенний боб - ноль - PullRequest
       12

Весенний боб - ноль

1 голос
/ 18 декабря 2011

Я работаю над веб-приложением "Гобелен, Весна", "Спящий режим" с Jetty 6.1.26 в качестве веб-сервера и не могу избавиться от nullpointexception для bean-компонента userDao (который определен в application_context_dao.xml::

public class UserManagerImpl implements UserManager {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public boolean checkLogin (String login, String password) {

        return userDao.checkLogin(login, password);

    }

application_context_dao.xml:

<beans>

<bean id="userDao" class="org.prikic.projektni.domain.dao.hibernate3.UserDaoImpl">
    <property name="sessionFactory">
        <ref bean="sessionFactory" />
    </property>
</bean>

<!-- sessionFactory -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="transactionProxy" abstract="true"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager" />
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="insert*">PROPAGATION_REQUIRED</prop>
            <prop key="update*">PROPAGATION_REQUIRED</prop>
            <prop key="save*">PROPAGATION_REQUIRED</prop>
            <prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
        </props>
    </property>
</bean>

web.xml:

<web-app>
<display-name>projektni Tapestry 5 Application</display-name>

<context-param>
    <!-- The only significant configuration for Tapestry 5, this informs Tapestry 
        of where to look for pages, components and mixins. -->
    <param-name>tapestry.app-package</param-name>
    <param-value>org.prikic.projektni</param-value>
</context-param>
<!-- Specify some additional Modules for two different execution modes: 
    development and qa. Remember that the default execution mode is production -->
<context-param>
    <param-name>tapestry.development-modules</param-name>
    <param-value>
        org.prikic.projektni.services.DevelopmentModule
    </param-value>
</context-param>
<context-param>
    <param-name>tapestry.qa-modules</param-name>
    <param-value>
        org.prikic.projektni.services.QaModule
    </param-value>
</context-param>


<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/application_context_dao.xml
        /WEB-INF/application_context.xml
         <!-- classpath:application_context*.xml --> 
    </param-value>
</context-param>

<filter>
    <filter-name>app</filter-name>
    <!-- Special filter that adds in a T5 IoC module derived from the Spring 
        WebApplicationContext. -->
    <filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>app</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Любая помощьбудет признателен ...

Я прошу прощения за то, что не поместил XML-файл контекста другого весеннего приложения, вот он:

application_context.xml:

<beans>
    <bean id="userManagerTarget" class="org.prikic.projektni.services.impl.UserManagerImpl">
            <property name="userDao">
                    <ref bean="userDao" />
            </property>
    </bean>
    <bean id="userManager" parent="transactionProxy">               
            <property name="target">
                    <ref bean="userManagerTarget"/>
            </property>
            <property name="transactionAttributeSource">
                    <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
            </property>
    </bean>
</beans>

Индекс.Java:

import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Service;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.prikic.projektni.services.UserManager;

public class Index {

private static final String BAD_CREDENTIALS = "Bad login and/or password. Please retry.";


//private boolean error = false;
@Persist
private boolean error;

@SessionState(create=false)
private String login;

@Inject
@Service("userManager")
private UserManager userManager;

private String password;

public String getLogin() {
    return login;
}

@Validate("required")
public void setLogin(String login) {
    this.login = login;
}

public String getPassword() {
    return password;
}

public String getErrorMessage() {
    String ret = null;
    if (error) {
        ret = BAD_CREDENTIALS;
    }
    return ret;
}

@Validate("required")
public void setPassword(String password) {
    this.password = password;
}

String onSuccess() {

    String ret = "Index";
    error = true;

    boolean s = userManager.checkLogin(login, password);

    if (s) {
        error = false;
        ret = "Home";
    }
    return ret;
}

}

1 Ответ

1 голос
/ 18 декабря 2011

Поскольку он отсутствует в вашем фрагменте конфигурации, я предполагаю, что он вообще отсутствует:

<bean id="userManagerImpl" class="org.prikic.projektni.domain.dao.hibernate3.UserManagerImpl">
    <property name="userDao" ref="userDao"/>
</bean>

После добавления этого компонента в конфигурацию Spring он должен работать. Конечно, теперь вы не можете просто позвонить:

new UserManagerImpl();

Поскольку Spring ничего не знает об этом классе, он не может выполнять внедрение зависимостей. Я не знаю Tapestry, но похоже, что вы уже используете TapestrySpringFilter, который, кажется, каким-то образом объединяет Гобелен с Spring. JavaDoc говорит, что это:

отображение каждого bean-компонента в нем как сервиса IoC Tapestry

Если вы используете этот так называемый сервис IoC и каким-то образом получите экземпляр UserManager, у вас все будет хорошо.

...