2013年7月4日星期四

[ADF技术-011] 如何在backingbean中执行javascript



    /**
     * 通过后台执行前台的JS代码
     * @param script
     */
    public static void script(String script) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        try {
                ExtendedRenderKitService service =
                    Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);
                service.addScript(facesContext, script);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

以上代码可以在backingbean中执行js

不过一定要注意一点:调用以上方法的按钮一定要设置partialSubmit="true"

2013年5月29日星期三

[Go Lang-006] Go基础-全局变量与局部变量


package main

import (
"fmt"
)

var a="a"
func main() {
fmt.Println("func main",a)
j()
g()
k()
}

func g(){
fmt.Println("func g",a)
}

func j(){
//局部作用域
//a:="j"
//全部作用域
a="j"
fmt.Println("func j",a)
}

func k(){
fmt.Println("func k",a)
}

以上程序有个注意的地方
当func j()中的局部变量的注释打开,a:="j"(红色部分)时
打印

func main a
func j j
func g a
func k a


当func j()中的全部变量的注释打开,a="j"(蓝色部分)时

func main a
func j j
func g j
func k j


就是a="j"a:="j"的区别,差了一个分号,就差别那么大?看下下面的解释大家就懂了..

其实
a="j"的意思就是把全局变量a重新赋值成"j"

a:="j"的意思就是重新定义一个新的局部变量a并赋值成"j"


[ADF技术-010] VO的ID字段自动获取Sequence

获取Sequence有两种不同的方法

1.Groovy表达式获取

  该方法是view的iterator中创建一行的时候就通过groovy表达式获取Seq中的值并赋值到id字段中,该方法有个缺点:如果事务回滚了或者创建的行没保存,就会造成Seq跳值

  1.1.选中需要获取Seq的EO中的字段

 1.2.Default Value中选择Expression(表达式)
     并填入(new oracle.jbo.server.SequenceImpl(SEQ名称,adf.object.getDBTransaction())).getSequenceNumber()


2.提交事务时候之前获取

  该方法是通过在提交事务之前手工获取对应的seq值并赋值到id字段中,是第一个方法很好的补充

  2.1.生成EO对应的java类,并勾上Data Manipulation Methods

  2.2.找到java类中的doDML方法,并重写
     
代码如下
     /**
      * Custom DML update/insert/delete logic here.
      * @param operation the operation type
      * @param e the transaction event
      */
     protected void doDML(int operation, TransactionEvent e) {
         if (operation == DML_INSERT) {
             if(this.getCompanyId()==null){
                 this.setCompanyId((new oracle.jbo.server.SequenceImpl(SEQ名称, this.getDBTransaction())).getSequenceNumber().intValue());
             }
         }
         super.doDML(operation, e);
     }

2013年5月20日星期一

[Go Lang-005] Go基础-Array,Slice,Map

Array
   Array(数组)是固定长度,相同类型的集合,因为是固定长度,因此大小不能改变.
     
     1.1.创建Array
     有两种初始化方式
          1.1.1.固定长度
               var a [3]int
          
          1.1.2.自动统计长度
               var a [...]int{1,2,3}
               中括号用...代替长度值,就会自动元素个数并赋值长度

Slice
   Slice(切片)是非固定长度,相同类型的集合,如果有新元素加入,Slice会增加长度,并且Slice总是指向一个底层的Array,是一个指向Array的指针

     2.1.创建一个长度为10,空的Slice
          slice:=make([]int,10)
     
     2.2.创建一个非空的slice
          slice:=[]int{1,2,3}
          注意:这里很容易搞错,上面是slice,下面是array
          slice:=[...]int{1,2,3}

          差别就是在于中括号中的数字,有数字就是array,没有就是slice
     
     2.3.创建一个Array,并且初始化Slice
          var a [...]int{1,2,3}
          slice:=[1:3]
     
     各种例子
a:=[...]int{1,2,3,4,5}
//从数组a中取出大于2,小于等于4的数字
s1:=a[2:4]

//从数组a中取出大于1,小于等于5的数字
s2:=a[1:5]

//用a中所有元素创建slice,这是a[0:len(a)]的简化写法
s3:=a[:]

//从序号0到3创建,这是a[0:4]简化写法,得到1,2,3,4
s4:=a[:4]

//从s2创建slice,注意s5的指针扔向指向a
s5:=s2[:]

       2.4.追加slice元素
s0:=[]int{1,2}
//向s0中追加元素3
s1:=append(s0,3)
//向s0中追加多个元素
s2:=append(s0,3,4,5)
//向S0中追加一个slice
s3:=append(s0,s2...)

       2.5.复制slice元素
        a:=[...]int{1,2,3,4,5}

var s1=make([]int,6)
//copy(target,src),src:源数组,target目标数组,返回函数是复制了多少个元素
s2:=copy(s1,a[0:])
println("s2",s2);

Map

     Map可以理解为是一个有索引的数组,一般定义形式为map[from type(key type)]to type(value type)
     monthDays:= map[ string] int {
        "Jan" :31,"Feb" :30,"Mar" :31,
        "Apr" :30,"May" :30,"Jun" :30,//<<<<<最后这个逗号是必须的!
     }
     3.1.读取
     println( "May:" ,monthDays["May" ]);

     3.2.增加元素
     monthDays[ "Dec"]=29

     3.3.删除元素
     delete(monthDays,"May")

     3.4.检查元素是否存在
     var value int //<<<接收value
     var isExist bool//<<<返回true/false标识是否存在
     value,isExist =monthDays["Jan"]

     另外一种方式
     value,isExist:=monthDays["Jan"]



参考文献
1.http://www.cnblogs.com/yjf512/archive/2012/06/14/2549929.html

[Go Lang-004] Go基础-赋值

Go赋值有两种方法
1.先定义类型再赋值

package main

import (
)

func main(){

//定义一个变量a类型为int
var a int
//将变量a赋值为1,如果不初始化默认为0
a=1
//打印变量a
println("a:",a);

}

注意:定义变量的时候切记和java是有区别的哦..亲...
java:int a;
go:var a int

多个变量同时赋值
//初始化,这种方式成为group
var(
a int
b string
)
注意:使用group方式赋值的时候注意
var和括号一定要在同一行
如:
var(

不能写成不在同一行
如:
var
(
会报错

//赋值
a=1
b="2"



2.直接赋值

package main

import (
)

func main(){
//将变量a赋值为1,不需要定义类型,类型由赋值推演出来
a:=1
//打印变量a
println("a:",a);
}

多个变量同时赋值
a,b:=1,2