使用ADF实现基于Form的CRUD (3)
来源:互联网 发布:python 2 3区别 编辑:程序博客网 时间:2024/06/02 06:20
运行环境:JDeveloper 11.1.2.1.0 + Oracle Database 10g Express Edition 10.2.0.1。
接上一个Project,在测试Update功能时,发现了一个小问题:
当用户修改数据项后,点击导航按钮时,应该提示:“数据已改动,请先保存或者放弃。”。
问题分析:
(1)当用户修改数据项并点击导航按钮后,相当于点击了Submit按钮,这时数据改动已经提交到了模型层,Application Module可以感知到模型层数据发生了修改。
(2)Commit按钮的disabled属性="#{!bindings.Commit.enabled}",我们也可以通过判断Commit按钮是否Enable了,来判断数据是否发生了改变。
重要步骤说明:
1. 复制JSFUtil.java和ADFUtil.java到View Controller Project。
2. 把Managed Bean的一些工具方法总结出来,创建一个BaseBackingBean。
其它BackingBean继承BaseBackingBean。
在本文中用到的方法有:
3. 使用Java代码调用First、Previous、Next、Last Operation
方式和调用Delete Operation一样,都是通过BindingContainer找到OperationBinding。
这里只列出调用First Operation的代码:
First按钮的页面代码如下:
<af:commandButton text="First" disabled="#{!bindings.First.enabled}" partialSubmit="true" id="cb1"
actionListener="#{myBackingBean.firstButton_actionListener}"/>
4. 运行
修改一条记录,然后点击导航按钮,会弹出提示窗口,如下图:
注意,这里有一个问题,就是不知道为什么,弹出的信息不能显示在点击按钮的附近,而是只能显示在页面中央?
进一步实验发现,如果组件是输入型组件,比如InputText,就可以显示在旁边,如下图:
难道context.addMessage方法的第一个参数对命令型组件不起作用?
接上一个Project,在测试Update功能时,发现了一个小问题:
当用户修改数据项后,点击导航按钮时,应该提示:“数据已改动,请先保存或者放弃。”。
问题分析:
(1)当用户修改数据项并点击导航按钮后,相当于点击了Submit按钮,这时数据改动已经提交到了模型层,Application Module可以感知到模型层数据发生了修改。
(2)Commit按钮的disabled属性="#{!bindings.Commit.enabled}",我们也可以通过判断Commit按钮是否Enable了,来判断数据是否发生了改变。
重要步骤说明:
1. 复制JSFUtil.java和ADFUtil.java到View Controller Project。
2. 把Managed Bean的一些工具方法总结出来,创建一个BaseBackingBean。
其它BackingBean继承BaseBackingBean。
在本文中用到的方法有:
public BindingContainer getBindings() { return BindingContext.getCurrent().getCurrentBindingsEntry(); } public boolean isDirty() { ApplicationModule am = ADFUtils.getDCBindingContainer().getDataControl().getApplicationModule(); return am.getTransaction().isDirty(); } public boolean isCommitEnabled() { Boolean commitState = (Boolean)JSFUtils.getManagedBeanValue("bindings.Commit.enabled"); boolean commitEnabled = commitState != null ? commitState.booleanValue() : false; return commitEnabled; } public void popupMessage(String message) { FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, message, null)); } public void popupMessage(ActionEvent actionEvent, String message) { FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(actionEvent.getComponent().getClientId(context), new FacesMessage(FacesMessage.SEVERITY_INFO, message, null)); }
3. 使用Java代码调用First、Previous、Next、Last Operation
方式和调用Delete Operation一样,都是通过BindingContainer找到OperationBinding。
这里只列出调用First Operation的代码:
public void firstButton_actionListener(ActionEvent actionEvent) { if (!isDirty()) { BindingContainer bindings = getBindings(); OperationBinding operationBinding = bindings.getOperationBinding("First"); Object result = operationBinding.execute(); } else { popupMessage(actionEvent,Save_Or_Undo_Message); } }
First按钮的页面代码如下:
<af:commandButton text="First" disabled="#{!bindings.First.enabled}" partialSubmit="true" id="cb1"
actionListener="#{myBackingBean.firstButton_actionListener}"/>
4. 运行
修改一条记录,然后点击导航按钮,会弹出提示窗口,如下图:
注意,这里有一个问题,就是不知道为什么,弹出的信息不能显示在点击按钮的附近,而是只能显示在页面中央?
进一步实验发现,如果组件是输入型组件,比如InputText,就可以显示在旁边,如下图:
难道context.addMessage方法的第一个参数对命令型组件不起作用?
Project 下载: Form_CRUD(3).7z
http://maping930883.blogspot.com/2009/09/adf043adfformcrud-3.html
0 0
- 使用ADF实现基于Form的CRUD (3)
- 使用ADF实现基于Form的CRUD (1)
- 使用ADF实现基于Form的CRUD (2)
- ADF组件之 SelectBooleanCheckbox使用(用于查询Form)
- 使用MyBatis对表执行CRUD操作——基于注解的实现
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- 使用MyBatis对表执行CRUD操作——基于XML的实现
- Mybatis的CRUD操作(基于xml)
- Mybatis的CRUD操作(基于注解)
- 使用sinatra实现简单的crud功能
- 使用ADF Faces 之一:开发用户界面(基于AJAX)
- Sharepoint 2010 Form 身份认证的实现(基于SQL)
- Sharepoint 2010 Form 身份认证的实现(基于AD)
- Sharepoint 2010 Form 身份认证的实现(基于AD)
- ADF 多选框树的实现
- 一步步实现:JPA的基本增删改查CRUD(jpa基于hibernate)
- 使用ADF实现基于Form的CRUD (2)
- OpenCV配置(64位 vs2010)
- POJ 3623 Best Cow Line, Gold(模拟)
- 2014-08-19 19:33:41
- HDU 4965 Fast Matrix Calculation 矩阵快速幂
- 使用ADF实现基于Form的CRUD (3)
- Codeforces 4C (STL map)
- 如何在ADF页面中显示警告信息?
- ADF与JSF的区别
- Java为什么要使用内部类?
- 使用github之:Git分支管理策略
- Regular Expression Matching
- ADF工具类:JSFUtil.java 源代码
- Chrome插件开发