在xpage重复控制中访问Java方法

时间:2014-02-03 12:28:35

标签: xpages

我创建了一个Java脚本库,它有一个包含一些jdbc代码的java类。

它有一个从数据库(mysql)获取值的方法。

现在我需要在重复控件中访问它,例如<xp:repeat value = ?? >

但是我找不到在那里访问它的方法。

如果是javascript库,则该方法将以<xp:repeat value="#{javascript:getSQLData()}"

的形式访问

如何实现呢?当我们在代码部分(在应用程序视图中的脚本库下面)中有一个名为Java的独立应用程序时,它是否是在脚本库中使用java的正确方法。

我的java代码是:

package com.db;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;

公共类Db {

Connection con;
Statement st;
ResultSet rs;

public Db(){

    this.connect("localhost", "3306", "vijay", "root", "");
    try {
        this.query("select * from prodet;");
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        System.out.println("///////////////query///////////////////////////////////////////");
        e.printStackTrace();
    }
}

public void connect(String server, String port, String db, String user, String pwd){
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con=DriverManager
        .getConnection("jdbc:mysql://localhost:3306/vijay","root", "");
    //con=DriverManager.getConnection("\"jdbc:mysql://"+server+":"+port+"/"+db+"\""+","+"\""+user+"\""+","+"\""+pwd+"\"");
        st=con.createStatement();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

List arr = new ArrayList();


@SuppressWarnings("unchecked")
public void query(String q) throws SQLException{
    rs=st.executeQuery(q);      
            while(rs.next()){
                arr.add(rs.getString(2));
                arr.add(rs.getInt(3));

            }
}

public String getData(){

     String arra = arr.toString();
    return arra;
}

public String doAllDb(){

    return this.getData();
}

public static void main(String a[]){
    Db d = new Db();

        System.out.println(d.getData());
}

}

访问该方法的ssj是:

importPackage(com.db);

var v = new com.db.Db();  v.doAllDb();

这个ssjs是使用ssjs在Bind数据下编写的。

<xp:repeat id="repeat1" rows="30">
    <xp:this.value><![CDATA[#{javascript:importPackage(com.db);

var v = new com.db.Db();  v.doAllDb();}]]&GT;     

预览xpage时,它为空白。没有显示任何价值。但我测试了java代码。它工作正常。

1 个答案:

答案 0 :(得分:2)

我一直使用托管bean来做到这一点: - )

<xp:repeat rows="10" var="row" value="#{User.rowClubs}">

“用户”是我的托管bean。它必须是一个实现可序列化接口的Java bean,具有不带参数的构造函数,并具有用于访问属性的公共getter / setter。在我的例子中,User bean实现了方法getRowClubs(),它返回一个表示俱乐部行的对象列表(来自我今天早上工作的应用程序)。

如果您需要有关托管bean的更多帮助,请告诉我们?根据你的问题,我猜你需要有关如何在bean中引用方法的帮助。

修改

我刚看到你的bean的其余部分(在可滚动的视图中)。使用你的bean你会使用类似的东西:

<xp:repeat id="repeat1" rows="30" value="Db.data" var="row">

假设您已在faces-config.xml中定义了bean,例如:

  <managed-bean>
    <managed-bean-name>Db</managed-bean-name>
    <managed-bean-class>com.db.Db</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>

我还建议您从bean中删除“main”方法。如果你需要从普通的Java程序中测试它,那么创建一个带有“main”的测试类来实例化并运行你的bean。

/约翰