Dwr调用Java类,返回的JavaBean在前台Extjs中的类型问题

1:需要返回的JavaBean:

package cn.dzq.test;
public class info {
	private long id;
	private String name;
	private int sex;
	private String email;
	private String tel;
	private String addTime;
	private String descn;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getSex() {
		return sex;
	}

	public void setSex(int sex) {
		this.sex = sex;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public String getAddTime() {
		return addTime;
	}

	public void setAddTime(String addTime) {
		this.addTime = addTime;
	}

	public String getDescn() {
		return descn;
	}

	public void setDescn(String descn) {
		this.descn = descn;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof info){
			info in=((info)obj);
			if((in.getId()==this.id)&&(in.getName().equals(this.name))&&(in.getSex()==this.sex)&&(in.getDescn().equals(this.descn))&&(in.getAddTime().equals(this.getAddTime()))&&(in.getTel().equals(this.tel)))
			{
				return true;
			}
		}
		return false;
	}

	@Override
	public String toString() {
		return this.id+"\t"+this.name;
	}
	
	
}


2:Dwr调用的后台方法类:
package cn.dzq.test;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class InfoManager  extends HibernateDaoSupport{
    public List<info> getResult() {
        List<info> list=this.getHibernateTemplate().find(" from info");
        for(int i=0;i<list.size();i++){
            System.out.println(i+":\t"+((info)list.get(i)).getName());  
            //验证返回的List不为空
        }
        return list;
    }
    
    
}


3:Spring,hibernate,以及dwr与sring的整合的配置都没有问题,我把dwr的配置片段放在下面(其他部分没有错误)
 <create javascript="info" creator="spring">
			<param name="beanName" value="test1"></param>
		</create>
		<create match="cn.dzq.test.info" converter="bean"/>

4:前台ExtJs测试代码片段(我前台是个grid想在这里直接用store.loadData(data)装载数据,):
Ext.onReady(function() {
			var cm = new Ext.grid.ColumnModel([

			        {
						header : '编号',
						dataIndex : 'id'
					},

					{
						header : '名称',
						dataIndex : 'name'
					},

					{
						header : '性别',
						dataIndex : 'sex'
					},

					{
						header : '邮箱',
						dataIndex : 'email'
					},

					{
						header : '电话',
						dataIndex : 'tel'
					},

					{
						header : '添加时间',
						dataIndex : 'addTime'
					},

					{
						header : '备注',
						dataIndex : 'descn'
					}

			]);

			var store = new Ext.data.JsonStore({
						fields : ['id', 'name', 'sex', 'email', 'tel','addTime', 'descn']
					});

			// 调用DWR取得数据

			info.getResult(function(data) {
				alert(data);//问题就在和这里,alert的只有一个逗号
				for(var i=0;i<data.length;i++){
				 alert(data[i]);
                               /*每次循环的结果都是null,但当换成String是可以打出来 我分析是在这里不识别后台的bean
                                但是我的都配置了啊,不知道什么原因???*/
				}
						alert("data:" + data);
						store.loadData(data);

					});

			var grid = new Ext.grid.GridPanel({
						renderTo : 'grid',
						store : store,
						cm : cm

					});
		})

5:我的问题是:
这个时候前台答应出来的data只有一个逗号,循环data发现每项都是空的,但这个时候后台返回的list确实不是空的。
我另外写了测试代码,要是返回的是基本类型,或者是String在前台就可以直接调用,那么对于这种bean的返回怎么处理?
我配置了转换器:<create match="cn.dzq.test.info" converter="bean"/>
怎么没有起到作用啊?
请各位帮忙看看,现在这里谢了。
问题补充:
楼上这位哥们【hiphunter921 (初级程序员)】
你的写法我试过了
还是不对的
问题的本质不是怎么在前台循环后台来的List
而是在前台就根本不识别后台的JavaBean
即:List<info>
问题补充:
哈哈 太幼稚了 都是粗心惹得祸 
我一直把
<create match="cn.dzq.test.Info" converter="bean"/>
看成:
<convert match="cn.dzq.test.Info" converter="bean"/> 
多谢路上哥们(hiphunter921 )指点
散分了

回答: Dwr调用Java类,返回的JavaBean在前台Extjs中的类型问题

  1. <convert match="cn.dzq.test.info" converter="bean"/> 

怎么实现javascript中调用java类中的方法

  1. Q
    body中部分代码如:<center><font size="4" color="red">吊灯</font> <input type="button" id="diaodeng" value=<%=state[0]%> onclick="dianji1()"><br><br><br><br></center>
    script中的的代码如下:
    function dianji1(){      
           var abc=document.getElementById("diaodeng");
           if(abc.value=="on"){          
                   abc.value="off";       
             }
           else{          
                  abc.value="on";          
            }
         }
    要求是通过点击按钮能够调用java类中的方法从而修改数据库中的内容
  2. A
    $("button").click(function(){
      $.post("/foo/usr/11",function(data){
       
      });
    });
    
    jquery post方法调用java方法修改数据库
    

delphi 调用java类, JNI.pas

  1. Q
    现在已经实现了一部分: 
    delphi调用的java的类,该类是独立的,比如
    public class DelphiCallJava {
    public static String dTest(String args) {
    if (args == null) {
    return "您没有输入参数!";
    } else {
    return "您输入的参数:" + args;
    }
    }
    生成一个类A;

    ==================
    但是,当在A类中调用了B类的方法时,再通过delphi调用A类中的方法,能找到类,能找到方法,可调用方法时报错了;

    请问有没有大侠遇到过这种情况?

    该例子,[email protected]  密码:delphi  里《delphi调用java类,包》,请高手看一下
  2. A
    关注!!!!!

请教:C# WebService调用Java WebService(返回Json类型数据) ,为什么接收为null

  1. Q

    如题, 在C#的 WebService里 调用 Java的WebService,返回值是json类型数据,但是程序里接收到数据为 null, 不知道是什么原因。 我用SoapUI 测试没有问题, SoapUI测试结果如下(左边是传的两个参数,右边是返回值):
    请教:C# WebService调用Java WebService(返回Json类型数据) ,为什么接收为null


    在vs里添加Web引用后, 调用如下( 其中所调用的 【getEAMObjects】函数应该返回json数据):
    请教:C# WebService调用Java WebService(返回Json类型数据) ,为什么接收为null


    为什么在程序里返回为null ,而 SoapUI测试工具却正常, 请教各位大神,不甚感激.!



  2. A
    好的调试方法很重要,楼上有位说了,网上有好的工具,你可以下载一个进行测试。

shell怎么调用java类

  1. Q
    我现在有个java类,想在桌面弄个直接执行该类的东西。
    像bat文件一样。
    该怎么做
    问题补充:sheep3600 写道命令行怎么执行的,bat文件就怎么写就行了。
    shell的写法如下

    #! /bin/bash
    
    java -jar xxx.jar
    
    


    前提是你这个xxx.jar要配置好自己的main等
    怎么搞啊?你说详细点。我也不指定命令行怎么写啊
    我现在就有一个类,也有main方法之类的。你说怎么做吧?
    问题补充:sheep3600 写道linux下的话,上面我写了。

    windows下跑用下面的
    class类
    @echo off
    start javaw xxx

    jar包
    @echo off
    start javaw -jar xxx.jar

    jar包这个有点说头,命令行导出就不教你了,挺麻烦的,你可以用eclipse导出jar包,导出的时候要指定main所在类。

    大前提是把环境变量配好,linux和windows都一样。
    bat执行写法很多,如果想写全了,估计能写个20多行吧,各种环境变量都写进去。
    我给你这个是最简单的。

    谢谢你!用你说的我导出一个jar文件后,直接用java -jar xxx.jar  就可以了。双击执行了后一闪而过。可以像有的那种在执行完后加个按任意键才关闭的吗?
  2. A
    @echo off
    java -jar xxx.jar
    echo 随便写点什么都能显示出来
    pause
    


    嘎嘎。

调用java 类的final static 常量的时候虚拟机为什么没加载类

  1. Q

          java类的static块会在java类被加载的时候执行,java会在使用到一个用户定义类的时候才动态加载它,这两句话对吧?

     

          我定义了一个类如下

     

     

    public class Constant {
    
        public final static int CON=1;
        public static int SS=2;
        static {
            System.out.println("static");
        }
    
        public static void print () {
            System.out.println("print");
        }
    }

     

         我在main函数里分别使用如下代码的时候均会导致上边的类被加载从而static块执行输出了信息

     

          Constant.print();
          System.out.println(Constant.IS);
          Constant c=new Constant(); 
          Class.forName("org.test.main.Constant");

     

         但是使用如下语句上边类的static块却没执行输出也就意味着类没被加载

     

           System.out.println(Constant.IS); 

     

         大家知道是怎么回事吗?


    问题补充:
    哦 打错了哦
    Constant.print(); 
    System.out.println(Constant.IS); 
    Constant c=new Constant();  
    Class.forName("org.test.main.Constant"); 

    第二句应该是
    System.out.println(Constant.CON);


    我补充一下 我说的意思是在main函数里面单独执行我列出的每个语句,用于观察static块执行与否,我说的结果全是经过实际的出来的,你们可以打开ide试一下。我就是不明白为什么引用类的静态常量不会导致类被加载(我刚才查到一篇文章也说了这个问题就是引用类的静态常量不会导致类被加载,但那篇文章同样没有解释为什么),难道jvm规范是就这么规定的?
    问题补充:
    今天不知怎么了 眼神还不好使了呢。我定义的CON是静态常量,SS是静态变量,输出写错了。  下面王者之剑说他执行输出类的静态常量时会执行静态块 但我这确实没执行。
    public static void main(String[] args){
            System.out.println(Constant.CON);
        }

    问题补充:
    上边的代码只输出了1  static块的System.out.println("static");并没有执行
  2. A
    静态变量和静态常量是不一样的,上面那个写错了。因为SS是大写,随手就写了个静态常量。

在JSP页面调用JAVA类里的数据库操作方法出错?

  1. Q
    这是JAVA的类的代码:
    package sqlpackage;
    import java.sql.*;
    public class getNewsId {
    	
    	public long getId() {
    		Connection con = null;
    		PreparedStatement pStatement = null;
    		String strSql = "select myseq.nextval from dual";
    		ResultSet res = null;
    		long id = 0;
    		try {
    			con = oracle.getCon();
    			pStatement = con.prepareStatement(strSql);
    			res = pStatement.executeQuery();
    			while (res.next()) {
    				id = res.getLong(1);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			oracle.closeRes(res);
    			oracle.closeStatement(pStatement);
    			oracle.closeCon(con);
    		}
    		return id;
    	}
    }
    


    然后我在JSP页面是这样做的:
    <%@ page import = "sqlpackage.*" %>

    <%
    	getNewsId getnewid = new getNewsId();
    	long newId = getnewid.getId();
    	out.print(newId);
    %>


    发送到Tomcat去调试的时候,提示出错信息如下:

    java.lang.NullPointerException
    sqlpackage.getNewsId.getId(getNewsId.java:15)
    上面的内容,我看了一下,是在第15行的这一句:pStatement = con.prepareStatement(strSql);

    请问一下各位老师是什么问题?因为我直接调试这个类,是可以获取ID,并向数据库中写记录的,现在头疼的就是,在JSP文件里调用数据库查询、更新、删除、插入几个类(自己写的)都是这种问题,所以觉得肯定什么地方没弄对,GOOGLE了一上午也没找到解决办法。
    问题补充:liguangwen 写道pStatement = con.prepareStatement(strSql);
    如果15行是这句的话说明 con 为null


    while (res.next()) { 
    如果15行是这句的话  res为null
    在JSP页面调用JAVA类里的数据库操作方法出错?

    汗,关键是怎么回事啊?如果为空的话为什么我单独建个类,也按照同样的声明该类的代码,却可以在终端调试出来?
    问题补充:这是建立管理和关闭连接的类

    package sqlpackage;
    
    import java.sql.*;
    
    public class oracle {
    	private static final String sqlJar = "oracle.jdbc.OracleDriver";
    	private static final String sqlUrl = "jdbc:oracle:thin:@192.168.1.153:1521:orcl";
    	private static final String sqlUser = "sys as SYSDBA";
    	private static final String sqlPass = "2012";
    	
    	/**
    	 * 建立连接
    	 * @return
    	 * Connection
    	 */
    	public static Connection getCon() {
    		Connection con = null;
    		try {
    			Class.forName(sqlJar);
    			con = DriverManager.getConnection(sqlUrl,sqlUser,sqlPass);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return con;
    	}
    

    问题补充:yanq12 写道引用con = oracle.getCon();  
    这个没有获取到con还 NULL 所以就报错了

    我把oracle类的方法贴出来了,怎么会没获取到呢?
    问题补充:kendylxy 写道从异常来看,未获得到数据库连接也就是说con = oracle.getCon();这句话获取的con是空,请检查oracle.getCon();方法能否获得数据库连接。
    我已经把相关的方法贴出来了,麻烦帮我看看。
    问题补充:kendylxy 写道看看这个方法有没有异常
    public static Connection getCon() {  
            Connection con = null;  
            try {  
                Class.forName(sqlJar);  
                con = DriverManager.getConnection(sqlUrl,sqlUser,sqlPass);  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return con;  
        }  


    打一下获取到的con看看,System.out.println(con); 或者加断点debug

    我在oracle建了一个main方法,然后填写如下代码:
    public static void main(String args[]) {
    		Connection con = null;
    		con = oracle.getCon();
    	}

    正常编译通过,内容如下:
    [email protected]

    麻烦再帮忙看一下!!!
  2. A
    引用
    正常编译通过,内容如下:
    [email protected]


    你用main执行可以,所有有jar包,你在tomcat中用在lib下面放了oracle 的驱动jar包了吗?

为什么C++通过JNI调用JAVA类函数速度慢近十倍?

  1. Q
    很不解,多谢了。实在对不住,积分所剩不多。
    问题补充:兄台误会我意思了,主要我没说清楚。我是指Java类中的某个函数的执行时间在C++中通过JNI方式调用执行要比通过Java传统方式执行要慢很多。

    wkfighting 写道理论上用native方法比普通的Java方法运行效率要高一些。Java程序的运行时通过虚拟机来进行的,虽说提供了可移植性,但运行效率也比直接的可执行文件要低,因为多了很多不必要的中间过程。JNI是直接调用由C或C++生成的动态函数库,所以执行起来要快很多。

    问题补充:
    我指的是Java类中的某个函数(也即相同的JAVA代码)的执行时间在C++中通过JNI方式调用执行要比通过Java传统方式执行要慢很多。

    redstarofsleep 写道LZ,你的代码是什么样的呢?
    你的意思是不是说相同的代码,用Java写和用C++写,但是Java运行的效率要高于Java调用C++??


    问题补充:我说的C++中调用Java类方法的执行时间是剔除了装载jvm.dll和创建JavaVM实例的时耗,且时间打印是在Java代码中的。

    kidding87 写道他说的是c++来调用java的类方法
    慢才正常啊,java的类都是基于jvm的,首先要有jvm,才能去调用java方法
    而jvm又基于操作系统
    他们就这样绕啊绕的,肯定慢了

    问题补充:
        //JVM启动参数
        options[0].optionString = Compiler;  
        //类地址
        options[1].optionString = ClassPath;      
        //lib地址
        options[2].optionString = LibraryPath;
        //最小内存
        options[3].optionString = MinMB;
        //最大内存
        options[4].optionString = MaxMB;
    
        //此处省略装载jvm.dll,创建JavaVM及查找Java类等过程
    	
        //取得入口主函数序列号
        jmethodID mid = env->GetStaticMethodID(cls, MainName, "([Ljava/lang/String;)V");
        if (mid == 0) {
            return -1;
        } 
    
        //main启动
        env->CallStaticVoidMethod(clazz, mid, NULL);


    以上代码为我在C++程序中调用Java类的主函数main的过程,其中时间打印是在Java类的main函数中。

    得到的结果是:通过这种方式执行后的打印的时间要比通过传统方式(即由java.exe来装载Java类)慢近十倍。

    redstarofsleep 写道你是什么样的代码呢?
    能再说具体一点吗?

    JVM本身也有优化的啊

    问题补充:好的,谢谢了

    kidding87 写道建议你在论坛问问他
    RednaxelaFX


    问题补充:第二次调用执行时间的确有提升,但还是远远慢于直接的java.exe启动执行。

    chen_yongkai 写道将java类中的方法执行两次,估计第二次时间就正常了。我猜测是Java类的延迟装载造成第一次调用慢了,你可以试试看,不知道我猜测的对不对?
  2. A
    建议你在论坛问问他
    RednaxelaFX

ROR中用JRUBY调用JAVA的常量

  1. Q
    我要在controller中调用Java,这样可以调用Java类的方法,但是怎么调用JAVA类中的常量, 比如:我在LIB包下引入了JXL.jar,可以应用这个包内的类的方法,但是不能引用这个包内某个类的常量,引用就会报错,
    是不是我调用Java类中常量的调用方法出错,
    我是这样调用JAVA常量的,

    include_class "jxl.write.WritableFont"

    puts WritableFont.ARIAL

    我已证实可以调用这个 WritableFont 类下的方法,但是调用常量会出错,出错内容为:
    undefined method `ARIAL' for Java::JxlWrite::WritableFont:Class

    是不是在JRUBY中有专门调用JAVA常量的方式呢?
    请指教哈。
  2. A
    puts WritableFont::ARIAL
    试试

有人说可以用java做业务,用php做前台,请问如何做?

  1. Q

    两家语言如何配合使用

    有没有这方面的技术文章?
    并且想问一下,有没有这方面的书,感觉 struts用起来还是不爽,如果能用php 相信一定很爽,不知道现在 有没有这方面的书,有没有成功的案例!

    很想在这方面研究一下!
    问题补充:
    其实,如果直接操作数据库的话就失去了配合的价值了.

    之前我用过一个小软件可以让你用java调用net中的方法.
    是不是也有相应的方式,让php调用java 中的方法?

    而且在baidu上我找也不知道用什么关键词,找不到相应的内容!
  2. A
    php是可以调用java类的

    P.S.不知道你用什么关键字查的,网上资料其实很多。。。
    在google上用“php 调用 java”:
    http://www.google.cn/search?hl=zh-CN&q=php+%E8%B0%83%E7%94%A8+java&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f