snp maf_Oracle MAF中的LOV

snp maf

snp maf

我们都喜欢最强大的ADF功能值列表之一。 使用它们,我们可以在ADF应用程序中声明性地轻松构建非常复杂的功能。 一件好事是,我们在Oracle MAF中也有类似的方法。 在ADF BC中,我们在业务服务级别(基本上在实体或VO级别)定义LOV,属性UI提示,验证规则等。 在MAF中,我们可以执行相同的操作,但是可以在数据控件级别执行。 这很明显,因为谁知道业务服务是什么。 它可以是Oracle MAF中的任何内容。

因此,在本文中,我将展示如何在Oracle MAF中定义和使用LOV。

让我们考虑一个简单的用例。 有一个付款表格如下:

iOS模拟器屏幕截图,2015年2月28日,下午4.50.55

最终用户在下拉列表中选择一个帐户,帐户总余额将用作默认付款金额,但是该金额可以更改。

业务模型基于几个POJO类:

public class PaymentBO {

    private int accountid;
    private double amount;
    private String note;

public class AccountBO {

    private int id;
    private String accountName;
    private double balance;

还有一个AccountService类,提供了可用帐户的列表:

public class AccountService {

    private final static AccountService accountService = new AccountService();

    private AccountBO[] accounts = new AccountBO[] {
        new AccountBO(1, "Main Account", 1000.89),
        new AccountBO(2, "Secondary Account", 670.78),
        new AccountBO(3, "Pocket Account", 7876.84),
        new AccountBO(4, "Emergency Account", 7885.80)
    };


    public AccountBO[] getAccounts() {
        return accounts;
    }


    public static synchronized AccountService getInstance() {
        return accountService;
    }

还有PaymentDC类,它作为数据控件公开:

public class PaymentDC {

    private final PaymentBO payment = new PaymentBO();
    private final AccountService accountService = AccountService.getInstance();

    public PaymentBO getPayment() {
        return payment;
    }


    public AccountBO[] getAccounts() {
        return accountService.getAccounts();
    }
}

DataControl结构如下所示:

屏幕截图2015年2月28日下午5.06.48

为了能够定义“付款”属性设置,例如UI提示,验证规则,LOV等。我将单击“铅笔”按钮,我将得到一个看起来与ADF BC中的表格非常相似的表格:

屏幕截图2015年2月28日下午6.28.36
那些熟悉ADF BC的人在这里几乎不会迷路。 因此,在“值列表”页面上,我们可以为accountid属性定义一个LOV:

屏幕截图2015年2月28日下午5.39.59

完成此操作后,我们就可以设置LOV的UI提示等。基本上就是这样。 我们需要做的只是将accountid属性从该DataControl面板拖放到页面上,作为selectOneChoice组件。

屏幕截图2015年2月28日下午5.45.20

<amx:selectOneChoice value="#{bindings.accountid.inputValue}"
                     label="#{bindings.accountid.label}" id="soc1">
    <amx:selectItems value="#{bindings.accountid.items}" id="si1"/>
</amx:selectOneChoice>

框架将完成剩下的工作,在pageDef文件中定义列表绑定定义:

<list IterBinding="paymentIterator" StaticList="false"
        Uses="LOV_accountid" id="accountid" DTSupportsMRU="true"
        SelectItemValueMode="ListObject"/>

但是,我们有选择的账户何时实现某种方式与账户余额支付金额的设置。 在ADF中,我们将能够在LOV的定义中定义多个属性映射,这就是解决方案。 像这样:

屏幕截图2015年2月28日下午5.41.43

但是在MAF中它不起作用。 不幸。 仅主映射有效。 因此,我们将在PaymentBO.setAccountid方法中手动执行此操作:

public void setAccountid(int accountid) {
    this.accountid = accountid;

    AccountBO account = AccountService.getInstance().getAccountById(accountid);
    if (account != null) {
        setAmount(account.getBalance());
    }
}

在PaymentBO.setAmount方法中,我们必须触发一个change事件,以便刷新页面上的value字段:

public void setAmount(double amount) {
    double oldAmount = this.amount;
    this.amount = amount;
    propertyChangeSupport.firePropertyChange("amount", oldAmount, amount);
}

而已! 这篇文章的示例应用程序可以在这里下载。 它需要JDeveloper 12.1.3和MAF 2.1.0。

翻译自: https://www.javacodegeeks.com/2015/03/lovs-in-oracle-maf.html

snp maf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值