2009-11-10 5 views
2

Je ne sais pas s'il est possible, mais je veux quelque chose commeComment puis-je passer un champ de formulaire en tant que paramètre d'action en utilisant Seam framework?

<f:view> 
<h:form>  
    <div> 
     <label for="accountId">Type your account id</label> 
     <input type="text" name="accountId"/> 
    </div> 
    <div> 
     <label for="amount">Type amount</label> 
     <input type="text" name="amount"/> 
    </div> 
    <div> 
     <!--NOTICE IT IS #{accountService.deposit} --> 
     <!--BUT I WANT TO USE #{accountService.deposit(accountId, amount)} --> 
     <h:commandButton action="#{accountService.deposit}" value="Deposit amount"/> 
    </div> 
</h:form> 
</f:view> 

Et mon service

@Stateless 
@Name("accountService") 
public class AccountServiceImpl implements AccountService { 

    @RequestParemeter 
    protected Integer accountId; 

    @RequestParemeter 
    protected double amount; 

    @PersistenceContext 
    private EntityManager manager; 

    public void deposit() { 
     Account account = manager.find(Account.class, accountId); 

     account.deposit(amount); 
    } 

} 

Il arrive que je veux utiliser celui-ci au lieu de ci-dessus

@Stateless 
@Name("accountService") 
public class AccountServiceImpl implements AccountService { 

    @PersistenceContext 
    private EntityManager manager; 

    public void deposit(Integer accountId, double amount) { 
     Account account = manager.find(Account.class, accountId); 

     account.deposit(amount); 
    } 

} 

Est-ce possible? Si oui, que dois-je utiliser - événement ou autre chose - pour atteindre mon objectif?

salutations,

+0

Hey Arthur, pourquoi ne pas vous inclure cette réponse de l'autre forum ici comme une réponse à votre propre question. –

Répondre

2

Il est possible,

Afin d'obtenir mon objectif, je dois utiliser les éléments suivants

<f:view> 
<h:form>  
    <div> 
     <label for="accountId">Type your account id</label> 
     <input type="text" name="accountId"/> 
    </div> 
    <div> 
     <label for="amount">Type amount</label> 
     <input type="text" name="amount"/> 
    </div> 
    <div> 
     <h:commandButton action="#{accountService.deposit(param.accountId, param.amount)}" value="Deposit amount"/> 
    </div> 
</h:form> 
</f:view> 

Le param.accountId et param.amount est évalué lorsque la méthode d'action est appelée. Bien que Seam permet au composant d'utilisation de contexte événement intégré dans l'expression EL comme suit

<h:commandButton action="#{accountService.deposit(eventContext.accountId, eventContext.amount)}" value="Deposit amount"/> 

Il ne fonctionne pas comme prévu. Peut-être à cause de cela fonctionne simplement lors de l'utilisation d'un composant, pas lors de l'utilisation d'un paramètre de demande. Si vous voulez passer un paramètre de requête, utilisez param

salutations,

Questions connexes