两个小技巧:vo查询所有记录数和adf中grid像table中一样自动添加行

最近做项目,遇到问题1 通过使用vo 查询后,在分页过程中发现性能很慢,经过排查发现,在执行到vo.getRowCout()时很慢,就是在计算总查询数目时很慢,后面改为row.last(),得到最后一条索引,也一样,很慢。于是找资料,问百度,发现原因,原因vo.getRowCount()用的是遍历vo,会使得系统很慢,所以建议:用vo.getEstimatedRowCount(),这个方法用的是select(*) from (VOSQL)。而后还有一些常见的问题,发布在下一博客

问题2 是怎么使用grid,使之可以像table一样,可以自动添加行,并且在每一行中加入inputText,可以取得这些值,通常做法是加binding,现在却是动态的,怎么做呢,肯定会用到ppr了,于是经过测试,找到如下方法。其中最主要的一点是<af:forEach>,因为之前通常会有<af:iterator>导致总不成功

直接代码吧。以下代码表达的是,当点击添加时,会自动添加一行,最好是静态,不要出现抖动。可以无限添加,最后输出值

<af:document id="d1">
<af:resource type="javascript">
function pageonload(evt){
var doc=evt.getSource();
AdfCustomEvent.queue(doc,"pageonload",{},true);
evt.cancel();
}
function addclick(evt){
var add=evt.getSource();
AdfCustomEvent.queue(add,"addclick",{},true);
evt.cancel();
}
</af:resource>
<af:clientListener type="load" method="pageonload"/>
<af:serverListener type="pageonload" method="#{GridAddBean.pageon}"/>
<af:form id="f1">
<af:panelGroupLayout id="pgl1">
<af:panelGridLayout id="pgl2" binding="#{GridAddBean.gridbinding}"
partialTriggers="ot2 d1">
<af:gridRow marginTop="5px" height="auto" id="gr2">
<af:gridCell marginStart="5px" width="20%" id="gc3">
<af:outputText value="需要的材料" id="ot1"/>
</af:gridCell>
<af:gridCell marginStart="5px" width="30%" id="gc5">
<af:outputText value="" id="ot5"/>
</af:gridCell>
<af:gridCell marginStart="5px" marginEnd="5px" width="50%"
id="gc2">
<af:outputText value="添加" id="ot2">
<af:clientListener type="click" method="addclick"/>
<af:serverListener type="addclick"
method="#{GridAddBean.addListener}"/>
</af:outputText>
</af:gridCell>
</af:gridRow>
<af:gridRow marginTop="5px" height="auto" id="gr3">
<af:gridCell marginStart="5px" width="20%" id="gc7">
<af:outputText value="序号" id="ot6"/>
</af:gridCell>
<af:gridCell marginStart="5px" width="30%" id="gc8">
<af:outputText value="材料名称" id="ot7"/>
</af:gridCell>
<af:gridCell marginStart="5px" marginEnd="5px" width="50%"
id="gc9">
<af:outputText value="备注" id="ot8"/>
</af:gridCell>
</af:gridRow>
<af:forEach items="#{GridAddBean.listAdd}" varStatus="vs"
var="add">
<af:gridRow marginTop="5px" marginBottom="5px" height="auto"
id="gr1" rendered="true">
<af:gridCell marginStart="5px" width="20%" id="gc1">
<af:inputText value="" id="ot3" label=" "
/>
</af:gridCell>
<af:gridCell marginStart="5px" width="30%" id="gc6">
<af:inputText value="" id="it1" label=" "
/>
</af:gridCell>
<af:gridCell marginStart="5px" marginEnd="5px" width="50%"
id="gc4">
<af:inputText value="" id="ot4" label=" "/>
</af:gridCell>
</af:gridRow>
</af:forEach>
</af:panelGridLayout>
</af:panelGroupLayout>
<af:commandButton text="subbmit" id="cb1"
actionListener="#{GridAddBean.buttonListener}"
action="#{GridAddBean.action}"/>
</af:form>
</af:document>

、、、、、、、、、、、、、、、、、、、、、

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.event.ActionEvent;

import oracle.adf.view.rich.component.rich.input.RichInputText;

import oracle.adf.view.rich.component.rich.layout.RichGridCell;
import oracle.adf.view.rich.component.rich.layout.RichGridRow;
import oracle.adf.view.rich.component.rich.layout.RichPanelGridLayout;

import oracle.adf.view.rich.render.ClientEvent;

import org.apache.myfaces.trinidad.component.UIXIterator;
import org.apache.myfaces.trinidad.event.AttributeChangeEvent;

public class GridAddBean {
private static List<addBean> listAdd=new ArrayList();
private RichInputText firstOne;
private RichInputText firstTwo;
private RichPanelGridLayout gridbinding;

public GridAddBean() {

}

public void listener(AttributeChangeEvent attributeChangeEvent) {
// Add event code here...
}

public void setListAdd(List<addBean> listAdd) {
this.listAdd = listAdd;
}

public List<addBean> getListAdd() {
return listAdd;
}

public void setFirstOne(RichInputText firstOne) {
this.firstOne = firstOne;
}

public RichInputText getFirstOne() {
return firstOne;
}

public void setFirstTwo(RichInputText firstTwo) {
this.firstTwo = firstTwo;
}

public RichInputText getFirstTwo() {
return firstTwo;
}

//最重要的地方

public void buttonListener(ActionEvent actionEvent) {
RichPanelGridLayout rgl=this.getGridbinding();
int bb= rgl.getChildCount();
System.out.println(bb);
List<UIComponent> uilist=rgl.getChildren();
for(int i=2;i<uilist.size();i++){
UIComponent rgr=(RichGridRow)uilist.get(i);
List<UIComponent> rgc=rgr.getChildren();
for(int j=0;j<rgc.size();j++){
RichInputText rit=(RichInputText)rgc.get(j).getChildren().get(0);
String mm=(String)rit.getValue();
System.out.println(mm);
}

}

}

public void setGridbinding(RichPanelGridLayout gridbinding) {
this.gridbinding = gridbinding;
}

public RichPanelGridLayout getGridbinding() {
return gridbinding;
}

public String action() {
return null;
}

public void pageon(ClientEvent clientEvent) {
// Add event code here...
listAdd.clear();
addBean ab=new addBean();
ab.setOne("");
ab.setTwo("");
listAdd.add(ab);
}

public void addListener(ClientEvent clientEvent) {
// Add event code here...
addBean ab=new addBean();
ab.setOne("");
ab.setTwo("");
listAdd.add(ab);
}
}

、、、、、


你可能感兴趣的:(table)