两个小技巧: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);
    }
}

、、、、、

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值