如何使用Seam框架将表单字段作为操作参数传递?

时间:2009-11-10 03:01:53

标签: java binding seam

我不知道是否可能,但我想要像

这样的东西
<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>

我的服务

@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);
    }

}

我想使用这个而不是上面显示的

@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);
    }

}

有可能吗?如果是这样,我应该使用什么 - 事件或其他什么 - 来实现我的目标?

的问候,

1 个答案:

答案 0 :(得分:2)

有可能,

为了实现我的目标,我需要使用以下

<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>

调用action方法时会评估param.accountId和param.amount 。虽然Seam允许在EL表达式中使用内置的事件上下文组件,如下所示

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

它没有按预期工作。也许是因为它在使用组件时才起作用,而不是在使用请求参数时。如果要传递请求参数,请使用 param

的问候,