ADF使用搜索提示
2017-09-28 15:04
162 查看
ADF是一个用于快速开发的框架。它为我们提供了很多很方便的组件。包括接下来要做的搜索提示功能,在ADF里面只需要一个组件即可完成。 搜索提示就是在搜索的时候并不需要知道搜索条件的全部信息,系统根据你所给出的部分关键字查询出与关键字相匹配的一个或多个记录供你选择
就像这样:
下面开始步骤:
1、新建一个FunsionWebApplication
建立业务组件business component
2、双击生成的VO新建一个查询,条件如下
3、建立好查询之后双击AM 选择DataModel 将之前的查询移入AM中去
4、页面代码设计,在页面上我们拖入一个输入框,然后点击SOURCE
粘贴如下代码
看到这里用了一个valueChangeListener 这个是用来监听输入框里面的值是否改变的。binding 绑定的是一个inputValue属性,该属性就是输入框里面的值。
注意这一行代码
<af:autoSuggestBehavior suggestedItems="#{selectBean.getItems}"/>
这个标签的意思就是自动建议。就是提示框。里面的suggestedItems属性实质上是一个list,存储了符合条件的数据的集合
<af:panelGroupLayout id="pgl4" layout="horizontal"> <af:inputText label="搜索" id="it1" changed="false" valueChangeListener="#{selectBean.valueChange}" autoSubmit="true" binding="#{selectBean.inputValue}"> <af:autoSuggestBehavior suggestedItems="#{selectBean.getItems}"/> </af:inputText> <af:commandButton text="搜索" id="cb2" action="gouser"/> </af:panelGroupLayout>
5、新建一个userdetail页面,只需要将DataControl拖进去就行。
6、代码实现内部逻辑,新建一个名为SelectBean的 java文件,将其配置到taskflow的managerbean中
7、编写SelectBean代码
在selectBean里面一共有两个绑定方法以及一个绑定属性,一个是getItems 获取根据关键字得到的元素,另一个是valueChange 监听输入框的值变化情况。inputValue属性是输入框的值。
代码如下:
public class SelectBean { private RichInputText inputValue; public SelectBean() { } /** * * @param kerwords 查询时的关键字 * @param operationName 查询操作的binding的名称 * @param selectParamsName 查询条件的参数命名(根据什么查询,查询参数名一致) * @param iterName 页面上迭代器的名称 * @param resultParamsName 查询出来的结果的参数名(VO属性名一致) * @param showParamsName 列表中需要展示的参数名称(VO属性名一致) * @return 返回一个SelectItem集合 */ public List<SelectItem> getSelectItems(String kerwords, String operationName, String[] selectParamsName, String iterName, String[] resultParamsName, String[] showParamsName) { //根据operationName获得绑定 OperationBinding selectoperation = Tools.findJUFormOperation(operationName); for (int i = 0; i < selectParamsName.length; i++) //根据关键字查询每一个条件参数,有一个满足条件即可 selectoperation.getParamsMap().put(selectParamsName[i], kerwords); //执行方法 selectoperation.execute(); //查询完成后会将结果存到一个迭代器中,所以接下来要找出这个迭代器并遍历它 DCIteratorBinding dcb = Tools.findDCIterator(iterName); //定义一个集合用来存储迭代结果 List<SelectItem> SelectItems = new ArrayList<SelectItem>(); //便利迭代器 for (Row row : dcb.getAllRowsInRange()) { //遍历的时候我们根据两个参数名称来取,一个是带有id的一个是不带有id的。带有ID的我们称之为value,不带有id的我们叫name String value = ""; String name = ""; for (int i = 0; i < resultParamsName.length; i++) { value = value + (i == 1 ? " " : "") + row.getAttribute(resultParamsName[i]).toString(); } for (int i = 0; i < showParamsName.length; i++) { name = name + row.getAttribute(showParamsName[i]).toString(); } SelectItems.add(new SelectItem(value, name)); } return SelectItems; } public void valueChange(ValueChangeEvent valueChangeEvent) { //获取改变后最新的值 String value = valueChangeEvent.getNewValue().toString(); if(value!=null){ String[] valueArray = value.split(" "); if(valueArray.length>1){ try{ Integer id =Integer.parseInt(valueArray[0]); OperationBinding ob = Tools.findJUFormOperation("ExecuteWithParams"); ob.getParamsMap().put("id", id); ob.execute(); if(Tools.findDCIterator("UserMain1Iterator").getEstimatedRowCount()==1){ //将值设置进输入框 ((RichInputText)valueChangeEvent.getComponent()).setValue(value.substring(value.split(" ")[0].length()+1, value.length())); //将输入框添加到AdfFacesContext AdfFacesContext.getCurrentInstance().addPartialTarget(getInputValue()); } }catch(NumberFormatException e){ e.printStackTrace(); } } } } public void setInputValue(RichInputText inputValue) { this.inputValue = inputValue; } public RichInputText getInputValue() { return inputValue; } public List<SelectItem> getItems(String kerword) { // Add event code here... return getSelectItems(kerword, "ExecuteWithParams", new String[] { "name" }, "UserMain1Iterator", new String[] { "UserId", "UserName" }, new String[] { "UserName" }); } }
8、页面定义配置
接下来就是页面配置
右键搜索页面->Go To Page Definition
添加一个binding 选择action并且按下图进行选择。
到这里就基本上完成了
另附Tools.java下载地址http://download.csdn.net/download/youzi1394046585/9999790
相关文章推荐
- 在ADF中使用ADS来实时更新数据(概览)
- ADF中使用CreateWithParams给新行中的字段指定默认值
- 使用ADF Faces 之三:创建和使用ADF自定义合成组件
- 使用ADF Data Binding 之三:使用 Placeholder Data Control
- ADF11g-024:ADF Skin Editor的使用
- 关于Oracle ADF 11g实现自动提示(客户端和服务端监听的使用)(一)
- 使用ADF-BC级联删除主从记录
- ADF Skin Editor的使用
- ADF(BC)--当使用绑定VO的<af:table>时可能会导致的内存问题
- Oracle ADF af:selectManyShuttle的使用
- 关于Oracle ADF 11g的客户端和服务端监听的使用(二)
- 在ADF应用中,能够通过 oracle.adf.view.rich.security.FRAME_BUSTING 参数来使用framebusting功能。
- 使用Enterprise Manager为ADF应用动态授权
- 在现有的jsf web应用中使用Oracle ADF Faces
- Common APIs的基本结构,ADF中如何来使用这些common APIs
- ADF11g-010:ADF组件之 SelectBooleanCheckbox使用(用于ADF table)
- ADF应用应避免使用jsp:include标签
- ADF:如何使用VO处理查询条件的值属于某一动态值列表的问题
- 如何在使用 ADF 插入或删除行后刷新数据表
- 使用 Oracle Enterprise Pack for Eclipse (OEPE) 开发 Oracle ADF 应用程序