您的位置:首页 > 其它

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 搜索提示