ADF常用知识代码总结 - oracle soa weblogic porlet - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > Web开发 > Oracle SOA > 正文

ADF常用知识代码总结

来源: http://blog.csdn.net/kewenxiangfu/article/details/37997269 阅读:

1.使用clientAttribute传值、获取值 或组件上面放客户端属性

          <af:selectBooleanCheckbox text="" label="" id="sbc1" 
 autoSubmit="true"
                          valueChangeListener="#{viewScope.BulkProcessBean.onSelect}">
              <af:clientAttribute name="employeeId" value="#{row.EmployeeId}"/>
            </af:selectBooleanCheckbox>


    public void onSelect(ValueChangeEvent valueChangeEvent) {
        Number id = (Number)valueChangeEvent.getComponent().getAttributes().get("employeeId");
...
}
注意:客户端属性名不能与其父组件的属性名重复,否则会得到第一个属性名的值。
(这里的employeeId必须是和selectBooleanCheckbox的属性名不同)
又例:
<af:commandButton text="财务退回" id="cb1"
 binding="#{tuiDanBean.eprebateBackBtn}"
                      action="#{tuiDanBean.eprebateBack_action}">
        <af:clientAttribute name="status"
                            value="#{row.Status}"/>
    </af:commandButton>
bean中获取属性值:
        String num =String.valueOf(eprebateBackBtn.getAttributes().get("status"));
----------------------------------------------------------------

2.为id设置seqence值

(new oracle.jbo.server.SequenceImpl("employees_seq",object.getDBTransaction())).getSequenceNumber()
在eo中设置目标属性,勾选表达式,然后编辑值。
---------------------------------------------------------------

3.根据table创建行,并赋值

(1)
CollectionModel _tableModel = (CollectionModel)table.getValue();
    JUCtrlHierBinding _adfTableBinding =(JUCtrlHierBinding)_tableModel.getWrappedData();
    DCIteratorBinding it = _adfTableBinding.getDCIteratorBinding();


oracle.jbo.Row row_adf = null;
row_adf = it.getNavigatableRowIterator().createRow();
    row_adf.setNewRowState(oracle.jbo.Row.STATUS_INITIALIZED);
    it.getNavigatableRowIterator().insertRow(row_adf);
row_adf.setAttribute("DepartmentId",row_poi.getCell(0).getNumericCellValue());
(2)
        CollectionModel _tableModel = (CollectionModel)eprebateTable.getValue();
        JUCtrlHierBinding _adfTableBinding =
            (JUCtrlHierBinding)_tableModel.getWrappedData();
        DCIteratorBinding it = _adfTableBinding.getDCIteratorBinding();
        NavigatableRowIterator iterator = it.getNavigatableRowIterator();
        Row row=iterator.createRow();
        row.setNewRowState(oracle.jbo.Row.STATUS_NEW);
        row.setAttribute("Num", 4); 
        iterator.insertRow(row); 
(3)
import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;


        BindingContainer bindings = getBindings();
        OperationBinding operationBinding = bindings.getOperationBinding("CreateInsert1");
        operationBinding.execute();
        CollectionModel _tableModel = (CollectionModel)eprebateTable.getValue();
        JUCtrlHierBinding _adfTableBinding =
            (JUCtrlHierBinding)_tableModel.getWrappedData();
        DCIteratorBinding it = _adfTableBinding.getDCIteratorBinding();
        NavigatableRowIterator iterator = it.getNavigatableRowIterator();
        Row currentRow = iterator.getCurrentRow();
        currentRow.setAttribute("Num", iterator.getRowCount());
注意:以上三种方式需要在页面中对table进行绑定,第三种还要做操作绑定。
-----------------------------------------------------------------------------

4.得到页面table的迭代器

    private NavigatableRowIterator getTableIter(RichTable table){
        CollectionModel _tableModel = (CollectionModel)table.getValue();
        JUCtrlHierBinding _adfTableBinding =
            (JUCtrlHierBinding)_tableModel.getWrappedData();
        DCIteratorBinding it = _adfTableBinding.getDCIteratorBinding();
        return it.getNavigatableRowIterator();
    }


NavigatableRowIterator iterator = getTableIter(vflistTable);
Row currentRow = iterator.getCurrentRow();
currentRow.setAttribute("Status", 0);
currentRow.setAttribute("Isback", "1");
am.getTransaction().commit();
------------------------------------------------------------------------------

5.格式化时间

import java.util.Date;
import java.text.SimpleDateFormat;

        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyyMMdd");
以上两句可写成:SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date date = new Date();
        String second = sdf.format(date);
如果还要时分秒: HH:mm:ss
注意:如果是时间类是oracle.jbo.domain.Date,用
sdf.format(currDate.dateValue())
---------------------------------------------------------------------------------

6.必填 必选 

 <af:outputLabel value="*" inlineStyle="color:Red;"/>


showRequired="true" 显示蓝色星号,不填没有错误信息  加上autocommit=true 不填有错误信息
required="true" 显示蓝色星号,不填有错误信息
requiredMessageDetail="没钱不干活啊!!!"  显示错误信息
-------------------------------------------------------

7.下面的程序使用param隐含对象来取得使用者输入的参数以及一些jsf基础知识:

(1)--------------------------------------------------------
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 <[email protected] contentType="text/html; charset=Big5"%>


 <html>
 <head>
 <title></title>
 </head>
 <body>
 <f:view>
    <b> 您好, <h:outputText value="#{param.name}"/> </b>
 </f:view>


 </body>
 </html>
param是JSF-EL预设的隐含对象变量,它代表request所有参数的集合,实际是一个java.util.Map型态对象,JSF所提供的隐含对象,大致上对应于JSP隐含物件,不过JSF隐含对象移除了pageScope与pageContext,而增加了facesContext与view,它们分别对应于 javax.faces.context.FacesContext与javax.faces.component.UIViewRoot。


  对于Map型态对象,我们可以使用 '.' 运算子指定key值来取出对应的value,也可以使用 [  ] 来指定,例如:


...
 <f:view>
    <b> 您好, <h:outputText value="#{param['name']}"/> </b>
 </f:view>
 ...
在 [  ] 之间,也可以放置其它的变量值,例如:


...
 <f:view>
    <h:outputText value="#{someBean.someMap[user.name]}"/>
 </f:view>
 ...
如果变量是List型态或数组的话,则可以在 [] 中指定索引,例如:


....
 <f:view>
     <h:outputText value="#{someBean.someList[0]}"/>
     <h:outputText value="#{someBean.someArray[1]}"/>
     <h:outputText
           value="#{someBean.someListOrArray[user.age]}"/>
 </f:view>
 ....
您也可以指定字面常数,对于true、false、字符串、数字,JSF EL会尝试进行转换,例如:


....
 <h:outputText value="#{true}"/>
 ....


 <h:outputText value="#{'This is a test'}"/>
 ....
如果要输出字符串,必须以单引号 ' 或双自变量 " 括住,如此才不会被认为是变量名称。


  在宣告变量名称时,要留意不可与JSF的保留字或关键词同名,例如不可取以下这些名称:


true false null div mod and or not eq ne lt gt le ge instanceof empty
(2)----------------------------------------------------------------
<h:outputText value="#{user.date}">
               <f:convertDateTime pattern="dd/MM/yyyy"/>
           </h:outputText>
(3)----------------------------------------------------------------
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 <[email protected] contentType="text/html;charset=Big5"%>
 <html>
 <head>
 <title>验证器示范</title>
 </head>
 <body>
    <f:view>
        <h:messages layout="table" style="color:red"/>
        <h:form>
            <h3>请输入您的名称</h3>
            <h:outputText value="#{user.errMessage}"/><p>
           名称: <h:inputText value="#{user.name}"
                              required="true"/><p>
           密码: <h:inputSecret value="#{user.password}"
                              required="true">
             <f:validateLength minimum="6"/>
         </h:inputSecret><p>
            <h:commandButton value="送出"
                             action="#{user.verify}"/>
        </h:form>
    </f:view>
 </body>
 </html>
  在<h:inputText>、</h:inputSecret>中,我们设定了required属性为true,这表示这个字段一定要输入值,我们也在</h:inputSecret>设定了<f: validateLength>,并设定其minimum属性为6,这表示这个字段最少需要6个字符。


  这一次在错误讯息的显示上,我们使用<h:messages>标签,当有验证错误发生时,相关的错误讯息会收集起来,使用<h:messages>卷标可以一次将所有的错误讯息显示出来。


(4)-----------------------------------------------------------
<h:commandButton value="送出" action="#{user.outcome}">
    <f:actionListener type="onlyfun.caterpillar.LogHandler"/>
    <f:actionListener type="onlyfun.caterpillar.VerifyHandler"/>
 </h:commandButton>
(5)-----------------------------------------------------------
outputFormat
  产生指定的文字讯息,可以搭配<f:param>来设定讯息的参数以格式化文字讯息,例如:


<f:loadBundle basename="messages" var="msgs"/>
 <h:outputFormat value="#{msgs.welcomeText}">
     <f:param value="Hello"/>
     <f:param value="Guest"/>
 </h:outputFormat>
  如果您的messages.properties包括以下的内容:


welcomeText={0}, Your name is {1}.
  则{0}与{1}会被取代为<f:param>设定的文字,最后显示的文字会是:


Hello, Your name is Guest.
  另一个使用的方法则是:


<h:outputFormat value="{0}, Your name is {1}.">
     <f:param value="Hello"/>
     <f:param value="Guest"/>
 </h:outputFormat>
(6)------------------------------------------------------------
inputSecret
  显示密码输入字段,即输出<input> HTML卷标,其type属性设定为password,例如:


<h:inputSecret value="#{user.password}"/>
  您可以设定redisplay属性以决定是否要显示密码字段的值,预设是false。


inputHidden
  隐藏字段,即输出<input> HTML卷标,其type属性设定为hidden,隐藏字段的值用于保留一些讯息于客户端,以在下一次发送窗体时一并送出,例如:


<h:inputHidden value="#{user.hiddenInfo}"/>
(7)-------------------------------------------------------------
如果搭配<f:param>来使用,则所设定的参数会被当作请求参数一并送出,例如:


<h:commandLink>
   <h:outputText value="welcome"/>
   <f:param name="locale" value="zh_TW"/>
 </h:commandLink>
 
--------------------------------------------------20:52 2011/9/19

8.从数据库中拿数据

vo.setWhereCluse()  
executeQuery 
AdfFacesContext.getCurrentInstance.addPerttrigger(table) 
--------------------------------------------------------------------

9.ADF的scope获取方式:

import oracle.adf.share.ADFContext;
import oracle.adf.view.rich.context.AdfFacesContext;


            ADFContext.getCurrent().getApplicationScope();
            ADFContext.getCurrent().getSessionScope();
            AdfFacesContext.getCurrentInstance().getPageFlowScope();            
            ADFContext.getCurrent().getRequestScope();
            ADFContext.getCurrent().getViewScope();




            Map<String, Object> applicationScope = ADFContext.getCurrent().getApplicationScope();
            Map sessionScope = ADFContext.getCurrent().getSessionScope();
            Map<String, Object> flowScope = AdfFacesContext.getCurrentInstance().getPageFlowScope();
            Map<String, Object> map = AdfFacesContext.getCurrentInstance().getViewScope();
            Map requestScope = ADFContext.getCurrent().getRequestScope();
            Map<String, Object> scope = ADFContext.getCurrent().getViewScope();
-------------------------------------------------------------------

10.JSF布局排版两个组件:<h:panelGrid>、<h:panelGroup>

<h:panelGrid>
  这个卷标可以用来作简单的组件排版,它会使用HTML表格卷标来绘制表格,并将组件置于其中,主要指定columns属性,例如设定为 2:


<h:panelGrid columns="2">
    <h:outputText value="Username"/>
    <h:inputText id="name" value="#{userBean.name}"/>
    <h:outputText value="Password"/>  
    <h:inputText id="password" value="#{userBean.password}"/>
    <h:commandButton value="submit" action="login"/>
    <h:commandButton value="reset" type="reset"/>
 </h:panelGrid>
  则自动将组件分作 2 个 column来排列
  注意:<h:panelGrid>的本体间只能包括JSF组件,如果想要放入非JSF组件,例如简单的样版(template)文字,则要使 <f:verbatim>包括住,例如:
<h:panelGrid columns="2">
    <f:verbatim>Username</f:verbatim>
    <h:inputText id="name" value="#{userBean.name}"/>
    <f:verbatim>Password</f:verbatim>
    <h:inputText id="password" value="#{userBean.password}"/>
    <h:commandButton value="submit" action="login"/>
    <h:commandButton value="reset" type="reset"/>
 </h:panelGrid>


<h:panelGroup>
  这个组件用来将数个JSF组件包装起来,使其看来像是一个组件,例如:


<h:panelGrid columns="2">
    <h:outputText value="Username"/>
    <h:inputText id="name" value="#{userBean.name}"/>
    <h:outputText value="Password"/>  
    <h:inputText id="password" value="#{userBean.password}"/>
    <h:panelGroup>
        <h:commandButton value="submit" action="login"/>
        <h:commandButton value="reset" type="reset"/>
    </h:panelGroup>
 </h:panelGrid>


---------------------------------------------------------------------

11.为table中的字段添加排序、过滤

<af:column headerText="#{bindings.CdsExportEprebateView2.hints.Vfno.label}"
                                                 id="c1" filterable="true" sortable="true" sortProperty="Vfno">
                                        <af:outputText value="#{row.Vfno}"
                                                       id="ot2"/>
                                      </af:column>
只读的字段生成之后,不能排序,不能过滤,这时候需要加上几个属性:
filterable="true" sortable="true" sortProperty="Vfno"
--------------------------------------------------------------------

12.在vo上增加条件查询并应用条件查询

条件查询名字:filterByDept
  条件查询条件:( (Employees.DEPARTMENT_ID = :deptId ) ) 
应用条件查询:
    public void applyEmplyeeCriteria(Integer deptId){
        ViewObjectImpl employees = (ViewObjectImpl)findViewObject("Employees");
        employees.setApplyViewCriteriaNames(null);
        ViewCriteria criteria = employees.getViewCriteria("filterByDept");
        employees.applyViewCriteria(criteria);
        employees.ensureVariableManager().setVariableValue("deptId", deptId);
        employees.executeQuery();
    }
-------------------------------------------------------------------

13.弹出消息框:

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public static void popupMessage(String level,String detail){        
FacesMessage fm = new FacesMessage(null,detail);//默认级别为info
if("info".equals(level))
fm.setSeverity(fm.SEVERITY_INFO);
else if("warn".equals(level))
fm.setSeverity(fm.SEVERITY_WARN);
else if("error".equals(level))
fm.setSeverity(fm.SEVERITY_ERROR);
else if("fatal".equals(fm.SEVERITY_FATAL))
fm.setSeverity(fm.SEVERITY_FATAL);
FacesContext.getCurrentInstance().addMessage(null, fm);
    }
-------------------------------------------------------------
14.行拷贝 代码中进行row copy
    //将one里的某些字段值copy给currentRow
    private void setApplyAttribute(Row currentRow,Row one,String...columns){
        //不要空指针
        if(currentRow==null || one==null || columns.length==0)
            return;
        //循环赋值
        for(String s:columns)
            if(one.getAttribute(s)!=null)
                currentRow.setAttribute(s, one.getAttribute(s));
    }
----------------------------------------------------------
15.页面三目表达式判断形式
#{(row.Datastate eq '0') ? '正常':((row.Datastate eq '1') ? '暂存':'删除')}


inlineStyle="background-color:#{(row.Canmerge == '1')? ((row.Ismother == '0')? 'yellow' : ''):''};"


readOnly="#{bindings.Marginal!=null}"
---------------------------------------------------------


16.安全验证重定向到另一个URL
ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
String url = ectx.getRequestContextPath()+”/adfAuthentication?logout=true&amp;end_url=/faces/start.jspx”;
try {
response.sendRedirect(url);
} catch (Exception ex) {
ex.printStackTrace();
}
---------------------------------------------------------
17.刷新控件(PPR)
AdfFacesContext.getCurrentInstance().addPartialTarget(UIComponent);
---------------------------------------------------------
18.查找控件
private UIComponent getUIComponent(String name) {
FacesContext facesCtx = FacesContext.getCurrentInstance();
return facesCtx.getViewRoot().findComponent(name) ;

---------------------------------------------------------
19.获取table选中的行(不一定是当前行)
RowKeySet selection = resultTable.getSelectedRowKeys();
Object[] keys = selection.toArray();
List receivers = new ArrayList(keys.length);
for ( Object key : keys ) {
User user = modelFriends.get((Integer)key);

// 获取table选中的行的另一种
for (Object facesRowKey : table.getSelectedRowKeys()) {
table.setRowKey(facesRowKey);
Object o = table.getRowData();
JUCtrlHierNodeBinding rowData = (JUCtrlHierNodeBinding)o;
Row row = rowData.getRow();
Test testRow = (Test)((DCDataRow)row).getDataProvider() ;

------------------------------------------------------------------
20.在eo实现类中 这个好:搞个方法验证
    public boolean validateLength(Number length) {
        if(length!=null && String.valueOf(length).contains("."))
            return false;
        return true;
    }
------------------------------------------------------------------
21.应用条件查询并设置参数值
    public void applyJobCriteria(String title){
        ViewObjectImpl employees = (ViewObjectImpl)this.getJobsView1();
        employees.setApplyViewCriteriaNames(null);
        ViewCriteria criteria = employees.getViewCriteria("JobsViewCriteria");
        employees.applyViewCriteria(criteria);
        employees.ensureVariableManager().setVariableValue("titleVar", title);
        employees.executeQuery();
        employees.setApplyViewCriteriaNames(null);
    }
---------------------------------------------------------------
22.开发人员可以通过继承javax.faces.event包中PhaseListener接口实现阶段listener,这个接口定义了3个方法:


PhaseId getPhaseId() 
void afterPhase(PhaseEvent) 
void beforePhase(PhaseEvent) 
 


getPhaseId方法返回何时提交阶段事件到listener,在不指定阶段的情况下,阶段listener的beforePhase和afterPhase方法将在每个生命周期中调用6次,即每个生命周期阶段调用一次。
但是上面这样不指定生命周期阶段的用法通常情况下是不合理的,如果不指定阶段则意味着所有阶段都会执行代码,在实际的应用中不太可能需要这样,


而如果你的逻辑处理需要花费很长时间的话,由于错误的使用可能导致页面显示的严重性能问题,因此在往beforePhase和afterPhase方法中添加业务逻辑时,


需要明确根据阶段来执行,明确指定在哪个阶段执行代码




public class CustomPhase implements PhaseListener {
 
   public void beforePhase(PhaseEvent e) {
      if(e.getPhaseId == PhaseId.INVOKE_APPLICATION) {
         System.out.println("BEFORE " + e.getPhaseId());
      }      
   }
 
   public void afterPhase(PhaseEvent e) {
      if(e.getPhaseId == PhaseId.INVOKE_APPLICATION) {
         System.out.println("AFTER " + e.getPhaseId());
      }      
   }

------------------------
23.页面定义js的两种方法:
<af:document> 
  <af:resource type="javascript" source="/customJsCode.js"/> 
  … 
</af:document> 
 
<af:document> 
  <af:resource type="javascript"> 
    function customJsFunction(){ … } 
  </af:resource> 
  … 
</af:document> 
 --------------------------
 24.页面传参 js调用
 <af:clientAttribute name="rowKey"  
                                         value="#{row.rowKeyStr}"/> 
<af:clientListener method="handleDepartmentClick"  
                                         type="click"/> 


<af:document> 
    <af:messages/> 
    <f:facet name="metaContainer"> 
        <af:group> 
           <script> 
              function handleDepartmentClick(evt){ 
                   rowKey = evt.getSource().getProperty("rowKey"); 
                   alert(rowKey); 
               } 
            </script> 
       </af:group> 
     </f:facet> 
    ... 
</af:document> 
-----------------------------
25.正则表达式验证:
<af:validateRegExp pattern="[^.]*"   hint="提示:" messageDetailNoMatch="必须输入整数!"/>


----------------------------
26.
安全退出:注销:
 FacesContext fctx = FacesContext.getCurrentInstance(); 
  ExternalContext ectx = fctx.getExternalContext(); 
  String url = ectx.getRequestContextPath() +  
             "/adfAuthentication?logout=true&end_url=/faces/Home.jspx";      
  try { 
    ectx.redirect(url); 
  } catch (IOException e) { 
    e.printStackTrace(); 
  } 
  fctx.responseComplete(); 
  return null; 
-----------------------------------------------
27.ADF中怎样获取(访问)web.xml中的参数值
(web.xml中的参数值可以提供给应用一些特殊的配置信息)
How-to read context parameters in web.xml from ADF? 
Context parameters in web.xml can be used to provide application specific configurations to ADF. To 
access context parameters in ADF, you use the FacesContext static context class as shown below:


FacesContext fctx = FacesContext.getCurrentInstance(); 
ExternalContext ectx = fctx.getExternalContext(); 
ServletContext servletContext = (ServletContext) ectx.getContext(); 
String myContextParam = (String)servletContext.getInitParameter("mycontextparam"); 


-------------------------------------------------
28.this.getDBTransaction().postChanges();
//也让它从缓存中查询满足条件的记录,但是这个会有一些操作上的隐患
-------------------------------------------------
29.Row 、Number 的api位置:
import oracle.jbo.Row;
import oracle.jbo.domain.Number;
-------------------------------------
30.创建一条有外键(link)的记录:需要先拿到主表的row然后create
        //创建一条对应的eta记录
        ViewRowSetImpl vrsi=(ViewRowSetImpl)row.getAttribute("CdsExportEtaView");
        Row etaRow = vrsi.createRow();
        vrsi.insertRow(etaRow);
        am.getDBTransaction().commit();     
---------------------------------
31.从请求中获取url信息:
request.getHeader("Host")--->127.0.0.1:7101
request.getContextPath()--->/cds
request.getServletPath()--->/faces
------------------------------
32.写入文件:
                    InputStream inputStream=new FileInputStream(file);
                    InputStreamReader isr=new InputStreamReader(inputStream,"UTF-8");
                    BufferedReader br=new BufferedReader(isr);
                    String str;
                    while((str=br.readLine())!=null)
                        out.write(str.getBytes("UTF-8"));
----------------------------
33.得到某个迭代器的当前行的某个属性值
    private Object getCurrExportid(){
        DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
        DCIteratorBinding iterBind= (DCIteratorBinding)dcBindings.get("CDS_Export_APPLY_ETA1Iterator");
        return iterBind.getCurrentRow().getAttribute("Exportid");        
    }
-------------------------------------
34.得到用户名 安全
 String user = ADFContext.getCurrent().getSecurityContext().getUserName();


How-to access the username from ADF BC? 
To access the username of an authenticated web session in ADF Business Components, use the security 
context as shown below :


ADFContext adfctx = ADFContext.getCurrent(); 
String user = adfctx.getSecurityContext().getUserPrincipal().getName(); 


The security context is also accessible from Groovy in ADF Business Components, for example to define 
a bind variable used in a View Criteria that queries View Object data in the context of the authenticated 
user :


adf.context.securityContext.userName 


The SecurityContext is not available in Oracle JDeveloper releases before 11g. In older releases, the 
authenticated username is accessible from a call to getUserPrincipalName() on the Application Module 
Impl class. This "old" API is still supported but discouraged in favor of the SecurityContext accessed 
from the ADF context. 
------------------------------
35.outputLabel和outputText两者有何不同:
outputLabel 文字有颜色,重在label作用
outputText  文字一般,不重在label作用
<af:outputLabel value="税名称" id="ol4"/>
 <af:outputText value="#{bindings.Tariffcds.inputValue}"
                                                 id="ot84"/>
----------------------------------
36.vo 增加临时属性:
因战斗需要,在vo中新增临时属性ligangcolor,设置:
type:String
value type:expression
value:
关键是value的取值,有两种来源,一种是其他字段的处理值,还有一种就是自定义值。
自定义值支持Java语言,貌似是groovy语言吧,不确定,以下两种设值方式是都是正确的:
(1)"blue"
(2)new String("blue")
这种设置初始值的方式,发现有一个缺点就是页面第一次加载会卡。
---------------------------------------------------
37.对于一些基本的CUD操作,可以弄个公共方法:
import oracle.adf.model.BindingContext;
import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;
/*
*opr:操作(如:delete、commit等)
*return:操作成功返回true;否则返回false
*/
    private boolean opr_action(String opr){
        BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();;
        OperationBinding opr = bindings.getOperationBinding(opr);
opr.execute();
if(!delete.getErrors().isEmpty()){
            System.out.println("删除失败!");
            return false;
        }else
return true;
    }
--------------------------------------
38.在Managed Bean中给ADF RichTable排序 .
(1)Backing Bean中设置排序方法
public void sortMethod(SortEvent event){ 
  DCIteratorBinding iter = ADFUtils.findIterator("xxxxVOIterator"); 
  String propery = event.getSortCriteria().get(0).getProperty();
String isAsending = event.getSortCriteria().get(0).isAscending() == true ? "asc" : "desc";
  //在内存中排序
ViewObject vo = iter.getViewObject();
vo.setSortBy(propery + " " + isAsending); 
  vo.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS); 
  vo.executeQuery();
vo.setSortBy(null); //去除排序基准 
  SortCriteria[] sc = new SortCriteria[0];
 iter.applySortCriteria(sc);



(2)在RichTable中添加sort listener事件
<af:table .....
          sortListener="#{backing_xxx.sortMethod}"


提示:如果是table中字段的默认升降序排序,可以在dataBingding中设置各个字段的排序方式。
----------------------------------
39.js运行.exe
function RunExe()
{
  var commandtoRun = "C:\\file.exe";
  var objShell = new <strong>ActiveXObject</strong>("Shell.Application");
  objShell.<strong>ShellExecute</strong>(commandtoRun, "", "", "open", 1);


}
--------------------------------
40.弹出消息框:
    private void popupMessage(String summary,String detail){
        FacesMessage fm = new FacesMessage();
        fm.setSeverity(fm.SEVERITY_WARN);
        fm.setSummary(summary);
        fm.setDetail(detail);
        FacesContext.getCurrentInstance().addMessage(null, fm);
    }
注意:以上是弹出消息框的完整代码,已经被收入JSFUtils工具类中,所以你可以简单使用以下:
JSFUtils.addFacesInformationMessage("这是一个一般信息提示框。");
JSFUtils.addFacesErrorMessage("这是一个错误信息提示框。");
--------------------------------
41.交通灯示例代码:
<af:column sortProperty="Exc" filterable="true"
                                       sortable="true"
                                       headerText="#{bindings.CdsImportViewView1.hints.Exc.label}"
                                       id="c1">
                                 <dvt:gauge gaugeType="LED"
                                             ledStyle="LS_DOT"
                                             imageHeight="24"
                                             imageWidth="24"
                                             rendered="true"
                                             textAntialiasing="false"
                                             visualEffects="NONE"
                                             gaugeSetDirection="GSD_DOWN"
                                             thresholdDialStyle="TDS_RING_FILL"
                                             animationOnDataChange="none"
                                             animationIndicators="NONE"
                                             renderImagemap="false"
                                             flashDefaultFontLoading="FLASH_DEFAULT_FONT_LOADING_NONE"
                                             partialSubmit="false"
                                             imageFormat="PNG_STAMPED"
                                             inlineStyle="height:30px;"
                                             value="#{row.Exc}"
                                             svgFontEmbedding="SVG_FONT_EMBEDDING_NONE"
                                             graphicAntialiasing="false"
                                             specularHighlight="SH_OFF"
                                             id="g2">
                                  <dvt:topLabel position="LP_NONE"/>           
                                  <dvt:thresholdSet>         
                                         <dvt:threshold text="Low"
                                           thresholdMaxValue="1"
                                           fillColor="#ff0000"/>    
                                         <dvt:threshold text="Medium"
                                           thresholdMaxValue="2"
                                           fillColor="#00ff00"/>    
                                         <dvt:threshold text="High"
                                           fillColor="#00ff00"/>
                                  </dvt:thresholdSet>
                               </dvt:gauge>
</af:column>
---------------------------------------------------
42.可以把批处理、复选框批量选中代码抽象出来,示例代码如下:
(1)页面代码:
<af:column id="c470" headerText="选择校验"
  align="center" width="50">
 <af:selectBooleanCheckbox text="" label=""
id="sbc1" autoSubmit="true"
valueChangeListener="#{impCostBean.selectHandler}">
<af:clientAttribute name="costId" value="#{row.Id}"/>
 </af:selectBooleanCheckbox>
</af:column>
(2)impCostBean中:
//得到保存选中的list
    public List<Number> getSelectList(){
        Map viewScope = ADFContext.getCurrent().getViewScope();
        Object obj = viewScope.get("isSureSelectList");
        if(obj==null){
            obj=new ArrayList<Number>();
            viewScope.put("isSureSelectList", obj);
        }
        return (List<Number>)obj;
    }
//选中、退选处理
    public void selectHandler(ValueChangeEvent valueChangeEvent) {
        // Add event code here...
        System.out.println("old value:"+valueChangeEvent.getOldValue());
        System.out.println("new value:"+valueChangeEvent.getNewValue());
        Boolean old = (Boolean)valueChangeEvent.getOldValue();
        Boolean newValue = (Boolean)valueChangeEvent.getNewValue();
        //排除这一情况null-->false
        if (old == null && newValue.booleanValue() == false)
            return;
        Number id =(Number)valueChangeEvent.getComponent().getAttributes().get("costId");
        if (!newValue.booleanValue()) {
            if (getSelectList().contains(id)) {
                System.out.println("放弃选择:"+id);
                getSelectList().remove(id);
            }
        } else {
            System.out.println("选择:"+id);
            getSelectList().add(id);
        }
        System.out.println("当前选择个数:"+getSelectList().size());
    }
}


以上不同页面之间可以共用啊!
以下是业务处理示例:
处理1:
    //更新选择的费用记录的确定标志
    public String sureHandler_action() {
        List<Number> costIdList = getSelectList();
        //1 检查:如果用户什么都没选
        if(costIdList==null || costIdList.size()==0)
            return null;
        //2 检查通过,迭代处理
        for(Number costId:getSelectList()){
...
        }
        //3 提交保存
        BindingContainer bindings = getBindings();
        OperationBinding operationBinding = bindings.getOperationBinding("Commit");
        operationBinding.execute();
        return null;
    }
处理2:
       //cost 迭代更新cost的确定标志位
       public void updateSureFlag(String voName,List<Number> costIdList){
           //先检查参数
           if(voName==null || "".equals(voName) || costIdList==null || costIdList.size()==0)
               return;
           //迭代更新
           ViewObjectImpl vo = (ViewObjectImpl)findViewObject(voName);
           for(Number costId:costIdList){
               Row[] byKey = vo.findByKey(new Key(new Object[] { costId }), 1);
               if (byKey != null && byKey.length>0){
                   Row row=byKey[0];
                   row.setAttribute("Issure", '1');
               }
           }
           this.getDBTransaction().commit();
       }
------------------------------------------------------------
43.根据条件变颜色、底色(三目表达式的运用):
inlineStyle="background-color:#{(row.Canmerge == '1')? ((row.Ismother == '0')? 'yellow' : ''):''};"
-----------------------------------------------------------
44.自定义窗体弹出的两种方式:
popup:
(1)页面使用showPopupBehavior
  <af:outputText value="outputText2" id="ot1">
                <af:showPopupBehavior triggerType="mouseOver" popupId="p2s"
                                      align="afterStart"/>
              </af:outputText>
              <af:popup id="p2s">
                 <af:noteWindow id="wnw21" >
                  <f:verbatim>maoinmimewoovowvwvvowvm
                  sftrgregf</f:verbatim>
                </af:noteWindow>
              </af:popup>
(2)代码 (需要绑定popup到bean中)
    RichPopup onPopup = this.getOnPopup();
    RichPopup.PopupHints hints = new RichPopup.PopupHints();
    onPopup.show(hints);
-------------------------------------------------------
45.根据主键找记录:
            ViewObject vo= this.getCdsUserView1();
            Row[] byKey = vo.findByKey(new Key(new Object[] { costId }), 1);
            if (byKey != null && byKey.length>0){
                Row row=byKey[0];
                for(String key:attrNames.keySet())
                    System.out.println(key+":"+row.getAttribute(key));
            }
--------------------------------------------------------
46.组件相关:
   (1)通过组件上的事件获取组件
 FacesContext context = FacesContext.getCurrentInstance();
 FacesMessage messagge = new FacesMessage("Successfully uploaded file"+file.getFilename()+"("+file.getLength()+"bytes)");
 context.addMessage(event.getComponent().getClientId(context),message);
   (2)获取根组件
 public static void addFacesErrorMessage(String attrName, String msg){
  FacesContext ctx = FacesContext.getCurrentInstance();
  FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, attrName, msg);
  ctx.addMessage(JSFUtils.getRootViewComponentId(), fm);
 }
   (3)通过根组件+组件ID查找组件
 pubic static void addFacesErrorMessage(String attrName, String msg){
  FacesContext ctx = FacesContext.getCurrentInstance();
  FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, attrName, msg);
  ctx.addMessage(JSFUtils.getRootViewComponentId().findComponent("productpriceIT").getClientId(ctx), fm);
 }
------------------------------------------------------
47.LOV页面使用:
(1)拖放view至页面,选择生成ADF Form,发现JobId的显示组件自动设置为ADF List of Values Input。如果选中Query List Automatically,弹出查询页面时,会直接显示所有结果。
JobId为一个文本输入框,旁边有一个查询按钮,点击后可以查询,选择一条记录,会返回到文本输入框。注意,无论查询显示的是哪些字段,返回的都是     JobId。
(2)设置inputListOfValues组件的autoSubmit="true"。除了(3)的运行效果之外:
 . 当输入AD_,按下Tab键,会弹出所有以AD_开头的JobId选项。
 . 当输入AD_V,按下Tab键,会直接补全为AD_VP,因为只有一个值满足条件。
(3)为inputListOfValues组件增加autoSuggestBehavior,如:<af:autoSuggestBehavior suggestedItems="#{bindings.JobId.suggestedItems}"/>此时,除了(4)的运     行效果之外,会新增一种效果:随着用户的输入,会自动下拉显示匹配的结果。经过测试,中文也可以支持自动匹配。
-----------------------------------------------------
48.添加表格的excel导出和打印功能:
<f:facet name="menus">
 <af:menu text="报表制作">
<af:commandMenuItem text="导出EXCEL">
 <af:exportCollectionActionListener type="excelHTML"
exportedId="t1"/>
</af:commandMenuItem>
<af:commandMenuItem text="打印">
 <af:showPrintablePageBehavior/>
</af:commandMenuItem>
 </af:menu>
  </f:facet>
-----------------------------------------------------
49.下拉列表的情况:
Consignee==》null     value
Consignee1==》0       索引
Transportation==》出口海运 value
Transportation1==》13 索引
Portofloading==》SHANGHAI value
Portofloading1==》114 索引
Pickupaddress==》5662 value
Pickupaddress1==》2 索引
货代公司Forward==>:Schenker value
货代公司Forward1==>:4 索引


使用值变事件得到下拉列表的值时,发现不能使用ADFUtils.getBoundAttribute("");这个只能获取值变前的值。
---------------------------------------------------
50.bean中得到当前行的高级使用:
效果:点击某个按钮后,传入选中行的整个对象:
方法:为该按钮添加setActionListener,其from值绑定到Table对应iterator的currentRow,to值绑定到页面对应MB中ViewRowImpl类型的变量rowObject(该变量就是用来接收传进来的行对象的)。实例<af:setActionListener from="#{bindings.tableIterator.currentRow}" to="#{MB.rowObject}">,然后在rowObject的set方法中就可以设置行中字段值了。
--------------------------------------------------------
51.类oracle.jbo.server.ApplicationModuleImpl的一些方法:
(1)executeCommand
public int executeCommand(java.lang.String command)
用于在服务器端执行特别的sql语句。返回值说明执行这条sql影响的行数。该方法适用于测试和调试应用。
Specifies a valid SQL statement to be executed by the server. The return integer value describes how many rows were affected by the SQL statement. This is a utility method for testing and debugging queries and applications. 
The following code example uses executeCommand. The SQL string is designed to update the EMP table. This example passes the string to executeCommand, then prints a message to report how many rows were actually updated. 


 public static void demoUpdateColumn(ApplicationModule appMod) {
     String sqlStr = "UPDATE EMP " +
                     "SET MGR=7007 " +
                     "WHERE MGR=7698 ";


     int n = appMod.getTransaction().executeCommand(sqlStr);
     System.out.println("Updated " + n + " rows.");
   }
 
 注意:这方法会执行任何可用的sql,比如说删除数据库中的一张表。比较危险,慎用。
 Be careful when using executeCommand, because it will execute any valid SQL statement. For example, you could perform an operation like the following DDL command: 


 appMod.getTransaction().executeCommand("DROP TABLE MYTEMPTABLE");
 
 A pending database transaction could be committed inadvertently due to the implicit commit performed by DDL operations, as well as having any row locks released. 




Parameters:
command - a valid SQL statement.


--------------------------------------------------------------------------------
(2)getDBTransaction
public DBTransaction getDBTransaction()
得到当前这个am的事务,不同am的事务不共享。
Gets this Application Module's database transaction. Note that if this method is invoked on a nested Application Module, the root Application Module's transaction is returned. This is because the transaction is shared by all Application Modules contained by the root Application Module. 
If the user creates two root Application Modules, they normally do not share the transaction. To share a transaction acroos root Application Modules, the user would need to define a global transaction through JTA and have both Application Modules participate in it. 


Returns:
the transaction. 
Throws: 
java.lang.IllegalStateException - if no root Application Module is found. This could happen if the user calls this method on an Application Module that has


--------------------------------------------------------------------------------
52.实体中的属性之历史属性和可更新的和刷新


1.History Column
Select this checkbox to log changes to the database. You can only log changes if: You have implemented authorization (login) using JAAS/JAZN. The selected attribute is persistent. Changes will be logged in the corresponding database column. You have not selected Primary Key, Mandatory, or Discriminator. The attribute type is Char, Character, String, Date, Timestamp, or Number. 


Once you have selected this checkbox, choose the history column type: 
(1)created on 创建时间
Select this option to use the column to log the date on which the row was first created. The attribute type must be Date or Timestamp. 
(2)modified on 修改时间
Select this option to use the column to log the date on which the row was last modified. The attribute type must be Date or Timestamp. 
(3)created by 谁创建的
Select this option to use the column to log the user who created the row. The attribute type must be Char, Character, or String. 
(4)modified by 谁修改的
Select this option to use the column to log the user who last modified the row. The attribute type must be Char, Character, or String. 
(5)version number
Select this option to use this column to log the number of times the row has been changed. The attribute type must be Number. 


2.Updateable
The view attribute setting is based on the entity attribute setting and can made more restrictive. 


(2)Always
Select to make an attribute updatable. 


(3)While New
Select to make an attribute updatable before an entity is first posted. 


(4)Never
Select to make an attribute read-only. 


3.Refresh After
Select one or both of these options to reflect the effects of triggers after DML operations. 


(1)update
After the entity object posts changes to an existing database row, the entity object retrieves the value of the attribute from the corresponding database field. 


(2)Insert After
the entity object inserts a new row in the database, the entity object retrieves the value of this attribute fromhe corresponding database field
----------------------------------------------------------------
53.ADF自带过滤功能不区分大小写:敏感不敏感
caseInsensitive
caseSensitive


filterFeatures="caseInsensitive"
例子如下:
 <af:column sortProperty="Consignee" filterable="true"
                                   sortable="true"
                                   headerText="#{bindings.CdsExportApplyView1.hints.Consignee.label}"
                                   id="c35" filterFeatures="caseInsensitive">
---------------------------------------------------------------
54.将当前行的DepartmentId放入pageFlowScope中;
        CollectionModel model = (CollectionModel) employeeTable.getValue();
        JUCtrlHierBinding tableBinding = (JUCtrlHierBinding) model.getWrappedData();
        //table synchronizes row selection with current binding row
        DCIteratorBinding tableIterator = tableBinding.getDCIteratorBinding();
        if (tableIterator.getCurrentRow() != null) {
            Object departmentIdValue =
                tableIterator.getCurrentRow().getAttribute("DepartmentId");
            //copy value into the pageFlowScope, which is returned in an task
            //flow param output
            ADFContext adfCtx = ADFContext.getCurrent();
            Map pageFlowScope = adfCtx.getPageFlowScope();
            pageFlowScope.put("departmentId", departmentIdValue);
}
----------------------------------------------------------------
55.玩输出模式: 
<af:column id="c201" headerText="操作"
width="105"
rendered="#{adfFacesContext.outputMode!='printable'}">
<af:commandButton text="财务退回" id="cb11"
 binding="#{tuiDanBean.vflistBackBtn}"
 action="#{tuiDanBean.vflistBack_action}"
 disabled="#{row.Vfdate!=null}"/>
 </af:column>
      <af:activeImage source="/images/stockChart.gif" rendered="#{adfFacesContext.outputMode != "email"}"/>
--------------------------------------------------------------
56.转向问题,看官方最佳解说:
            FacesContext context = FacesContext.getCurrentInstance();
            HttpSession session =
                (HttpSession)context.getExternalContext().getSession(true);//session不可能为空
            String actionStr = String.valueOf(session.getAttribute("firstLink"));
            context.getApplication().getNavigationHandler().handleNavigation(context, null, actionStr);


How-to efficiently redirect an ADF Faces view using ADFc 
ADF Faces developers use facesContex.getExternalContext().redirect(String) to issue a GET request to a 
JSF view. Using ADFc, the redirect URL should neither be read from the current UIView root directly or 
provided in the form /faces/<viewId name>. Instead, have the controller generating the redirect String 
for a specific viewId as shown below: 
FacesContext fctx = FacesContext.getCurrentInstance(); 
ExternalContext ectx = fctx.getExternalContext(); 
  
String viewId = "... add viewId...." 
ControllerContext controllerCtx = null; 
controllerCtx = ControllerContext.getInstance(); 
String activityURL = controllerCtx.getGlobalViewActivityURL(viewId); 
try{ 
   ectx.redirect(activityURL); 
} catch (IOException e) { 
  //Can't redirect 
  e.printStackTrace(); 

 
Why? Because a redirect is a Get request and you don't want ADFc to treat it as a new application request 
but instead retrieve the internal controller state. For this you need the state toke in the redirect URL, 
which is what the code line above does 
----------------------------------------------------------------
57.bean中增加组件:
UIComponent parent =....;
RichInputText it = new RichInputText();


it.setValue("test...");parent.getChildren().add(it);
---------------------------------------------------------------
58.删除确认对话框:
(1)popup所在页面位置
<f:view>
    <af:document id="d1" title="成品计划员管理">
      <af:messages id="m1"/>
      <af:form id="f1">
      <!-- 对话框 开始 -->
      <af:popup id="p1">
  ...
(2)popup示例:只需要改这个dialogListener
<af:popup id="p1">
          <af:dialog id="d5" title="删除确认"
                     dialogListener="#{consigneeBean.deleteApply}">
            <af:panelGroupLayout id="pg210" halign="center" layout="vertical">
              <br/>
              <af:outputText value="确定要删除吗?" id="ot341"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <br/>
            </af:panelGroupLayout>            
          </af:dialog>
</af:popup>
(3)调用者
<af:commandToolbarButton text="删除" id="ctb4">
       <af:showPopupBehavior triggerType="click"
                                              popupId=":::p1"/>
</af:commandToolbarButton>
-------------------------------------------------------------
59.常用工具类小结:


(1)org.apache.commons.lang.math.NumberUtils 处理数字与字符串的无异常转化
例子:
        String str=null;
        int i = NumberUtils.toInt(str);
        System.out.println("i="+i);
字符串是null,或是其他任意不能转化成整数的字符串,都会转变成0。
(2)java.text.SimpleDateFormat 用于格式化日期
(3)java.text.DecimalFormat 用于格式化数字


---------------------------------------------------------------
60.将文件作为流读入内存:
InputStream input = ClassLoaderUtil.getStream("sap.properties");
prop.load(input);
input.close();


InputStream is = InitialLoader.class.getResourceAsStream("/global.properties");
---------------------------------------------------------------
61.点一下按钮关闭当前页面:
FacesContext fc = FacesContext.getCurrentInstance();
           
ExtendedRenderKitService erks = (ExtendedRenderKitService)Service.getRenderKitService(fc, ExtendedRenderKitService.class);
          
erks.addScript(fc, "window.close();");
---------------------------------------------------------------
62.设置日期为当前日期


如果eo中对应的属性类型为oracle.jbo.domain.Date,有以下两种设置为当前日期方式:


row.setAttribute("Applydate",new oracle.jbo.domain.Date(oracle.jbo.domain.Date.getCurrentDate()));


oracle.jbo.domain.Date now = new oracle.jbo.domain.Date(new Timestamp(System.currentTimeMillis()));
--------------------------------------------------------------
63.对数据库的操作要谨慎一些,有提交就会有回滚,善用异常
Example 4–15 Updating an Existing Entity Row
/* Update the status of an existing order */  
public void updateOrderStatus(long orderId, String newStatus) {
      //1. Find the order
  OrderEOImpl order = retrieveOrderById(orderId);
  if (order != null) {
      //2. Set its Status attribute to a new value
    order.setOrderStatusCode(newStatus);
      //3. Commit the transaction
    try {
      getDBTransaction().commit();
    }
    catch (JboException ex) {
      getDBTransaction().rollback();
      throw ex;
    }
  }
}
The example for removing an entity row would be the same, except that after finding 
the existing entity, you would use the following line instead to remove the entity before committing the transaction:
// Remove the entity instead!
order.remove();
-------------------------------------------------------------------------------------------
64.官方查询标准步骤:
1.Request begings and application module is acquired
2.setWhereClause(null) 清除查询提交
3.setWhereClauseParam(null) 清除查询绑定变量
4.setWhereWhereClause(...)
5.setWhereClauseParam(...)
6.executeQuery()
7.Application module is released 
------------------------------------------------------------------------------------------
65.建立View Criteria,查询条件查询:
import oracle.jbo.ApplicationModule;
import oracle.jbo.Row;
import oracle.jbo.ViewCriteria;
import oracle.jbo.ViewCriteriaRow;
import oracle.jbo.ViewObject;
import oracle.jbo.client.Configuration;


public class TestClientViewCriteria {
public static void main(String[] args) {
String amDef = "devguide.examples.readonlyvo.PersonService";
String config = "PersonServiceLocal";
ApplicationModule am = Configuration.createRootApplicationModule(amDef, config);
// 1. Find the view object to filter
ViewObject vo = am.findViewObject("PersonList");
// Work with your appmodule and view object here
Configuration.releaseRootApplicationModule(am, true);
// 2. Create a view criteria row set for this view object
ViewCriteria vc = vo.createViewCriteria();
// 3. Use the view criteria to create one or more view criteria rows
ViewCriteriaRow vcr1 = vc.createViewCriteriaRow();
ViewCriteriaRow vcr2 = vc.createViewCriteriaRow();
// 4. Set attribute values to filter on in appropriate view criteria rows
vcr1.setAttribute("PersonId","> 200");
vcr1.setAttribute("Email","d%");
vcr1.setAttribute("PersonTypeCode","STAFF");
// Note the IN operator must be followed by a space after the operator.
vcr2.setAttribute("PersonId","IN (204,206)");
vcr2.setAttribute("LastName","Hemant");
// 5. Add the view criteria rows to the view critera row set
vc.add(vcr1);
vc.add(vcr2);
// 6. Apply the view criteria to the view object
vo.applyViewCriteria(vc);
// 7. Execute the query
vo.executeQuery();
while (vo.hasNext()) {
Row curPerson = vo.next();
System.out.println(curPerson.getAttribute("PersonId") + " " +
curPerson.getAttribute("Email"));
}
}
}
-------------------------------------------------------------------
66.使用VO创建新行:
import oracle.jbo.ApplicationModule;
import oracle.jbo.Row;
import oracle.jbo.ViewObject;
import oracle.jbo.client.Configuration;
import oracle.jbo.domain.DBSequence;
import oracle.jbo.domain.Date;
import oracle.jbo.domain.Timestamp;


public class TestCreateOrder {
public static void main(String[] args) throws Throwable {
String amDef = "oracle.fodemo.storefront.store.service.StoreServiceAM";
String config = "StoreServiceAMLocal";
ApplicationModule am = Configuration.createRootApplicationModule(amDef, config);
// 1. Find the Orders view object instance.
ViewObject orders = am.findViewObject("Orders");
// 2. Create a new row and insert it into the row set
Row newOrder = orders.createRow();
orders.insertRow(newOrder);
// Show the entity object-related defaulting for CreatedBy attribute
System.out.println("CreatedBy defaults to: " + 
newOrder.getAttribute("CreatedBy"));
// 3. Set values for some of the required attributes        
Date now = new Date(new Timestamp(System.currentTimeMillis()));
newOrder.setAttribute("OrderDate", now);
newOrder.setAttribute("OrderStatusCode", "PENDING");
newOrder.setAttribute("OrderTotal", 500);
newOrder.setAttribute("CustomerId", 110);
newOrder.setAttribute("ShipToAddressId", 2);
newOrder.setAttribute("ShippingOptionId", 2);
newOrder.setAttribute("FreeShippingFlag", "N");
newOrder.setAttribute("GiftwrapFlag", "N");
// 4. Commit the transaction
am.getTransaction().commit();
// 5. Retrieve and display the trigger-assigned order id
DBSequence id = (DBSequence)newOrder.getAttribute("OrderId");
System.out.println("Thanks, reference number is " + 
id.getSequenceNumber());
Configuration.releaseRootApplicationModule(am, true);
}
}
-------------------------------------------------------------------------------------------------------

67.得到sequence:

public oracle.jbo.domain.Number getSequenceNumber()   { 
  try{ 
   String seq = "your_db_sequence_name"; 
   oracle.jbo.server.SequenceImpl theSeq =  
      new oracle.jbo.server.SequenceImpl(seq, getDBTransaction()); 
   oracle.jbo.domain.Number seqNextNumber = theSeq.getSequenceNumber(); 
   return seqNextNumber; 
  } 
  catch (Exception e){ 
    //handle exceptions 
  } 
 return null; 

绑定方法到页面上之后在bean中调用:
public oracle.jbo.domain.Number getNextEmployeeSequenceNumber(){ 
  BindingContext bindingContext = BindingContext.getCurrent(); 
  BindingContainer bindings = bindingContext.getCurrentBindingsEntry(); 
  OperationBinding getNextSequence =  
                   bindings.getOperationBinding("getSequenceNumber"); 
  oracle.jbo.domain.Number seqVal =  
                 (oracle.jbo.domain.Number) getNextSequence.execute();  
  return seqVal; 

-------------------------------------------------------------------------

 
 

相关文章列表: