ExtJs4.2 Ext.direct小例子

jsp这个东西还真是高级货,

 

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>123</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	
	<link rel="stylesheet" type="text/css" href="extjs/examples/shared/example.css" />	
	<script type="text/javascript" src="extjs/examples/shared/include-ext.js"></script>
	<script type="text/javascript" src="extjs/examples/shared/options-toolbar.js"></script>
	<script type="text/javascript" src="extjs/examples/shared/examples.js"></script>
	<script type="text/javascript" src="test/test.js"></script> 
	
  	<script>
		Ext.require([
		    'Ext.direct.*',
		    'Ext.panel.Panel',
		    'Ext.form.field.Text',
		    'Ext.toolbar.TextItem'
		]);
		
		Ext.onReady(function(){
		    
		    function doEcho(field){
		        TestDirect.chat(field.getValue(), function(result, event){
		            var transaction = event.getTransaction(),
		                content = Ext.String.format('<b>Successful call to {0}.{1} with response:</b><pre>{2}</pre>',
		                    transaction.action, transaction.method, Ext.encode(result));
		            
		            updateMain(content);
		            field.reset();
		        });
		    }
		    
		    function doMultiply(field){
		        TestDirect.multiply(field.getValue(), function(result, event){
		            var transaction = event.getTransaction(),
		                content;
		                
		            if (event.status) {
		                content = Ext.String.format('<b>Successful call to {0}.{1} with response:</b><pre>{2}</pre>',
		                    transaction.action, transaction.method, Ext.encode(result));
		            } else {
		                content = Ext.String.format('<b>Call to {0}.{1} failed with message:</b><pre>{2}</pre>',
		                    transaction.action, transaction.method, event.message);
		            }
		            updateMain(content);
		            field.reset();
		        });
		    }
		    
		    function updateMain(content){
		        main.update({
		            data: content
		        });
		        main.body.scroll('b', 100000, true);
		    }
		    
		    Ext.direct.Manager.addProvider(Ext.xuyi.REMOTING_API, {
		        type: 'polling',
		        url: Ext.xuyi.POLLING_URLS.message,
		        listeners: {
		            data: function(provider, event){
		                updateMain('<i>' + event.data + '</i>');
		            }
		        }
		    });
		    
		    var main = Ext.create('Ext.panel.Panel', {
		        // The id is used for styling
		        id: 'logger',
		        title: 'Remote Call Log',
		        renderTo: document.body,
				width: 600,
				height: 300,
		        tpl: '<p>{data}</p>',
		        tplWriteMode: 'append',
		        autoScroll: true,
		        bodyPadding: 5,
		        dockedItems: [{
		            dock: 'bottom',
		            xtype: 'toolbar',
		            items: [{
		                hideLabel: true,
		                itemId: 'echoText',
		                xtype: 'textfield',
		                width: 300,
		                emptyText: 'Echo input',
		                listeners: {
		                    specialkey: function(field, event){
		                        if (event.getKey() === event.ENTER) {
		                            doEcho(field);
		                        }
		                    }
		                }
		            }, {
		                itemId: 'echo',
		                text: 'Echo',
		                handler: function(){
		                    doEcho(main.down('#echoText'));
		                }
		            }, '-', {
		                hideLabel: true,
		                itemId: 'multiplyText',
		                xtype: 'textfield',
		                width: 80,
		                emptyText: 'Multiply x 8',
		                listeners: {
		                    specialkey: function(field, event){
		                        if (event.getKey() === event.ENTER) {
		                            doMultiply(field);
		                        }
		                    }
		                }
		            }, {
		                itemId: 'multiply',
		                text: 'Multiply',
		                handler: function(){
		                    doMultiply(main.down('#multiplyText'));
		                }
		            }]
		        }]
			});
		});

		
  	</script>
  	</head>
  
  <body>
  </body>
</html>


 


directjngine.2.2.jar

gson-2.2.1.jar

yuicompressor-2.4.2.jar

这几个包是最重要的


web.xml

 

<servlet>  
        <servlet-name>DjnServlet</servlet-name>  
        <servlet-class>  
            com.softwarementors.extjs.djn.servlet.DirectJNgineServlet  
        </servlet-class>  
  
        <init-param>  
            <param-name>debug</param-name>  
            <param-value>true</param-value>  
        </init-param>  
  
        <init-param>  
            <param-name>minify</param-name>  
            <param-value>true</param-value>  
        </init-param>  
  
        <init-param>  
            <param-name>providersUrl</param-name>  
            <param-value>djn/directprovider</param-value>  
        </init-param>  
  
        <init-param>  
            <param-name>batchRequestsMultithreadingEnabled</param-name>  
            <param-value>false</param-value>  
        </init-param>  
  
        <!-- api域: 对应下面的各个param-name的前缀,可以设置多个不同的域 在value中逗号隔开-->  
        <init-param>  
            <param-name>apis</param-name>  
            <param-value>test</param-value>  
        </init-param>  
  
        <!-- test.对应上面的域 test/用来安放其自动生成的js文件 -->  
        <init-param>  
            <param-name>test.apiFile</param-name>  
            <param-value>test/test.js</param-value>  
        </init-param>  
  
        <!-- test.对应上面的域 命名空间会在页面加载时候用上 -->  
        <init-param>  
            <param-name>test.apiNamespace</param-name>  
            <param-value>Ext.xuyi</param-value>  
        </init-param>  
  
        <!-- test.对应上面的域 类的具体包路径 -->  
        <init-param>  
            <param-name>test.classes</param-name>  
            <param-value>com.cdg.direct.TestDirect</param-value>  
        </init-param>  
  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <!-- 默认servlet路径 -->  
    <servlet-mapping>  
        <servlet-name>DjnServlet</servlet-name>  
        <url-pattern>/djn/directprovider/*</url-pattern>  
    </servlet-mapping> 


java代码

 

 

package com.cdg.direct;

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

import org.apache.commons.lang.StringUtils;
import com.cdg.bean.TestVO;
import com.softwarementors.extjs.djn.config.annotations.DirectMethod;
import com.softwarementors.extjs.djn.config.annotations.DirectPollMethod;

public class TestDirect {
	static String chat_words = "";

	// 注意注解
	@DirectMethod
	public String chat(TestVO vo) {// 这里可以直接使用对象来接收值了,恩,很方便的说
		String user = vo.getUser();
		String chat = vo.getChat();
		if (StringUtils.isNotBlank(user)) {
			chat_words = chat_words + "<p>用户 " + user + " 在 "
					+ formatDate(new Date()) + " 说: " + chat + "</p>";
		}
		return chat_words;
	}

	@DirectMethod
	public String multiply(TestVO vo) {// 这里可以直接使用对象来接收值了,恩,很方便的说
		String user = vo.getUser();
		String chat = vo.getChat();
		if (StringUtils.isNotBlank(user)) {
			chat_words = chat_words + "<p>用户 " + user + " 在 "
					+ formatDate(new Date()) + " 说: " + chat + "</p>";
		}
		return chat_words;
	}

	// direct polling注释
	@DirectPollMethod(event = "message")
	public String chatRoom(Map<String, String> params) {
		// 测试polling获得前台的传值
//		System.out.println(params.get("polling_date"));
		return chat_words;
	}

	private String formatDate(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		return sdf.format(date);
	}
}


注意jar包自动在里面生成的test.js代码,所以我的jsp里面也引入了代码.

 




上图








 

posted @ 2013-05-22 21:27  javawebsoa  Views(383)  Comments(0Edit  收藏  举报