2012-01-23 5 views
3

J'utilise webflow de printemps, ceci est mon fluxSpring webflow 'Propriété non trouvée' exception

<view-state id="welcome"> 
    <transition on="emailEntered" to="checkEmail"></transition> 
</view-state> 
<decision-state id="checkEmail"> 
    <if test="alta.checkEmail(requestParameters.email)" 
    then="okState" 
    else="errorState"/> 
</decision-state> 
<view-state id="okState"/> 
<view-state id="errorState"/> 

J'ai activé automatiquement la numérisation dans mon servlet contexte:

<context:component-scan base-package="com.me.myproj" /> 

Je reçois un org.springframework.binding.expression.PropertyNotFoundException: Propriété introuvable erreur pour l'état checkEmail. Le problème est qu'il ne reconnaît pas mon haricot « alta », c'est ma classe Alta (placé dans com.me.myproj):

@Component 
public class Alta { 
    public Alta(){ 
     System.out.println("constructor ok"); 
    } 
    public boolean checkEmail(String email){ 

     return "[email protected]".equals(email); 
    } 

} 

Si je crée explicitement la fève:

<bean id="alta" class="com.me.myproj.Alta"/> 

Alors ça marche bien. Il semble donc que le contexte de flux ne reconnaisse pas les composants analysés automatiquement, bien que alta soit instancié (comme je l'ai vu quand j'ai débogué).

Que puis-je faire pour éviter de déclarer explicitement tous les haricots impliqués dans mon flux?

+0

est-il résolu? quelle est la solution? –

+0

Non, désolé, je n'y ai plus travaillé .. – de3

Répondre

0

Avez-vous inclus

<context:annotation-config/> 

dans votre servlet-context.xml?

+0

J'ai essayé mais ça n'a pas fonctionné – de3

0

Lorsque vous créez explicitement le bean dans le fichier XML, vous nommez le bean avec le nom "alta" (valeur d'identifiant). C'est pourquoi vous pouvez exécuter des méthodes de la classe Alta se référant à "alta.checkEmail (...)".

<bean id="alta" class="com.me.myproj.Alta"/> 

Si vous voulez éviter la déclaration XML et utiliser les annotations uniquement, vous devez spécifier ce nom dans l'annotation simplement en passant le nom comme argument [1]. Par exemple:

@Component("alta") 
public class Alta { 
    public Alta(){ 
     System.out.println("constructor ok"); 
    } 
    public boolean checkEmail(String email){ 

     return "[email protected]".equals(email); 
    } 
} 

Espérons que cela aide.

[1] http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/stereotype/Component.html