snp maf
我们都喜欢最强大的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
snp maf