我们都喜欢最强大的ADF功能值列表之一。 使用它们,我们可以在ADF应用程序中声明性地轻松构建非常复杂的功能。 一件好事是,我们在Oracle MAF中也有类似的方法。 在ADF BC中,我们在业务服务级别(基本上在实体或VO级别)定义LOV,属性UI提示,验证规则等。 在MAF中,我们可以执行相同的操作,但是可以在数据控件级别执行。 这很明显,因为谁知道业务服务是什么。 它可以是Oracle MAF中的任何内容。
因此,在这篇文章中,我将展示如何在Oracle MAF中定义和使用LOV。
让我们考虑一个简单的用例。 有一个付款表格如下:
最终用户在下拉列表中选择一个帐户,帐户总余额将用作默认付款金额,但是该金额可以更改。
业务模型基于几个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结构如下所示:
为了能够定义“付款”属性设置,例如UI提示,验证规则,LOV等。我将单击“铅笔”按钮,我将得到一个看起来与我们在ADF BC中非常相似的表格:
那些熟悉ADF BC的人几乎不会在这里迷路。 因此,在“值列表”页面中,我们可以为accountid属性定义一个LOV:
完成此操作后,我们便可以设置LOV的UI提示等。基本上就是这样。 我们需要做的就是将accountID属性从该DataControl面板拖放到页面上,作为selectOneChoice组件。
<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的定义中定义多个属性映射,这就是解决方案。 像这样:
但是在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