精华内容
下载资源
问答
  • dwr(Direct Web Remoting)官网 官网github代码库地址 官网demo(war包,内有源码) java推送信息给浏览器,就是浏览器有个轮寻的连接(定时发请求查询),或者长http,websocket连接来实现。 dwr的三种Reverse ...

    dwr(Direct Web Remoting)官网
    官网github代码库地址
    官网demo(war包,内有源码)

    java推送信息给浏览器,就是浏览器有个轮寻的连接(定时发请求查询),或者长http,websocket连接来实现。

    dwr的三种Reverse Ajax推送消息的方式 Piggyback, Polling and Comet

    polling   就是【隔一段时间】向服务器发送一请求来检查服务端是否有数据更新
    comet   就是一个长http请求,在请求期间服务端可以向客户端推送数据,但是这种做法要求服务器和浏览器【长期建立】一个通信通道,而且效率很低
    piggyback 就是服务端的更新数据都在排队等待,等到【下一次有请求】过来,那么这些等待更新数据就伴随这次请求一起发送到浏览器

    dwr的js调用java方法的部分就不看了,就是普通的调用请求返回结果,看起来就像js直接调用java。主要是使用dwr的reverse-ajax功能,来【方便快速实现】java【推送】给浏览器信息,实现web网页的实时更新功能。

    dwr项目的整体配置过程

    • 配置web.xml的servlet(DwrServlet重要的是各种参数init-param,DwrListener)
    • 配置dwr.xml,推送处理类绑定,js方法与java类,与web.xml同级目录
    • java类
    • web页面,需要加载engine.js,util.js,dwr.xml中绑定的java类对应的js。【都是访问地址,dwr会自动生成】

    web.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    
    <web-app id="dwr">
    
      <display-name>DWR (Direct Web Remoting)</display-name>
      <description>A Simple Demo DWR</description>
    
      <listener>
        <listener-class>org.directwebremoting.servlet.DwrListener</listener-class>
      </listener>
    
      <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <display-name>DWR Servlet</display-name>
        <description>Direct Web Remoter Servlet</description>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    
        <init-param>
         <param-name>fileUploadMaxBytes</param-name>
         <param-value>25000</param-value>
        </init-param>
    
        <!-- This should NEVER be present in live -->
        <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <init-param>
          <param-name>accessLogLevel</param-name>
          <param-value>runtimeexception</param-value>
        </init-param>
    
        <!-- Remove this unless you want to use active reverse ajax -->
        <init-param>
          <param-name>activeReverseAjaxEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- By default DWR creates application scope objects when they are first
        used. This creates them when the app-server is started -->
        <init-param>
          <param-name>initApplicationScopeCreatorsAtStartup</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- WARNING: allowing JSON-RPC connections bypasses much of the security
        protection that DWR gives you. Take this out if security is important -->
        <init-param>
          <param-name>jsonRpcEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- WARNING: allowing JSONP connections bypasses much of the security
        protection that DWR gives you. Take this out if security is important -->
        <init-param>
          <param-name>jsonpEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- data: URLs are good for small images, but are slower, and could OOM for
        larger images. Leave this out (or keep 'false') for anything but small images -->
        <init-param>
          <param-name>preferDataUrlSchema</param-name>
          <param-value>false</param-value>
        </init-param>
    
        <load-on-startup>1</load-on-startup>
      </servlet>
    
       <!--推送路径与自动生成js-->
      <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
      </servlet-mapping>
    
      <!--模拟java推送,访问后启动数据推送-->
      <servlet>
        <servlet-name>mydwr</servlet-name>
        <servlet-class>dwr.Test</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>mydwr</servlet-name>
        <url-pattern>/mydwr.do</url-pattern>
      </servlet-mapping>
    
    </web-app>
    

    dwr.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
    
    <dwr>
      <allow>
        <create creator="new" scope="application" javascript="dwrpush">
          <param name="class" value="dwr.Mydwr"/>
        </create>
      </allow>
    </dwr>
    

    Mydwr.java

    package dwr;
    
    import org.directwebremoting.Browser;
    import org.directwebremoting.ScriptSessions;
    
    public class Mydwr {
        public static void sendMsg(final String html,final String msg){
            Browser.withPage(html, new Runnable() {
                @Override
                public void run() {
                    //dealDwrData是mydwr.html页面定义好的处理推送数据js方法名
                    ScriptSessions.addFunctionCall("dealDwrData",msg);
                }
            });
        }
    }
    

    Test.java 模拟java有数据需要推送到前端web页面

    package dwr;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class Test extends HttpServlet {
    
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            while (true){
    
                try{
                    Thread.sleep(3000);
                    System.out.println("mydwr start");
                    //向哪个页面推送数据,实现任意页面推送
                    Mydwr.sendMsg("/dwrtest/mydwr.html","hello");
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    

    mydwr.html 需要推送的页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <!--dwr自动生成-->
        <script type='text/javascript' src='dwr/engine.js'></script>
        <!--dwr自动生成-->
        <script type='text/javascript' src='dwr/util.js'></script>
        <!--dwr.xml中create的javascript属性,指定js文件名称-->
        <script type='text/javascript' src='dwr/interface/dwrpush.js'></script>
        <script>
            window.onload = function(){
                dwr.engine.setActiveReverseAjax(true);
                dwr.engine.setErrorHandler(errorHandler);
                dwr.engine.setPollStatusHandler(updatePollStatus);
            }
    
            function errorHandler(message, ex){
                dwr.util.setValue("error", "<font color='red'>Cannot connect to server. Initializing retry logic.</font>", {
                    escapeHtml: false
                });
                setTimeout(function(){
                    dwr.util.setValue("error", "");
                }, 5000)
            }
            function updatePollStatus(pollStatus){
                dwr.util.setValue("pollStatus", pollStatus ? "<font color='green'>Online</font>" : "<font color='red'>Offline</font>", {
                    escapeHtml: false
                });
            }
    
            //处理推送的数据,更新页面
            function dealDwrData(data) {
                console.log(data);
            }
        </script>
        <title>mydwr</title>
    </head>
    <body>
    检测服务器是否连接,会自动重连
    Server status: <span id="pollStatus"></span>
    <div id="error"></div>
    
    </body>
    </html>

    WEB-INF/lib 下需要的jar包

    commons-fileupload-1.2.jar
    commons-io-1.3.1.jar
    commons-logging-1.0.4.jar
    dwr.jar
    itext-2.0.6.jar
    jakarta-oro-2.0.8.jar
    log4j-1.2.12.jar

    配置好tomcat项目,启动(项目名dwrtest)
    访问http://localhost:8081/dwrtest/mydwr.html 看看js是否加载,路径对不对
    访问http://localhost:8081/dwrtest/mydwr.do 启动推送 ,看到mydwr.html的控制台输出

    完整项目路径 gitee

    展开全文
  • DRF接口访问报错,TypeError: Direct assignment to the reverse side of a related set is prohibited. Use parent_id.set() instead. 示例 class Comment(models.Model): """评论""" comment = models....

    DRF接口访问报错,TypeError: Direct assignment to the reverse side of a related set is prohibited. Use parent_id.set() instead.

    • 示例
    class Comment(models.Model):
        """评论"""
    
        comment = models.CharField(max_length=20, verbose_name="评论内容")
        parent = models.ForeignKey("self", related_name="prent_id", null=True,
                                   on_delete=models.CASCADE, verbose_name="所评论的评论ID")
    
        class Meta:
            db_table = "tb_comment"
            verbose_name = "评论"
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.user_name
    
    • 当该模型类的序列化器被访问时会出现以下错误
    TypeError: Direct assignment to the reverse side of a related set is prohibited. Use parent_id.set() instead.
    
    • 通常主键对象想要获取子对象集时
    comments = comment.comment_set.all()
    
    • 在外键字段设置related_name="parent_id"时
    coments = comment.parent_id.all()
    

    因为外键字段名称也为parent_id,当外键对象反向引用调用comment.parent_id.all()时会与外键字段冲突。

    • 处理方法
    修改外键字段名不能与它的related_name重名;
    不设置related_name属性 
    
    展开全文
  • redirect和reverse这三种方法对于Django Web开发是至关重要。以下是Django URL重定向的HttpResponseDirect, redirect和reverse方法的详细用法。 HttpResponseDirect方法 HttpResponseRedirect是django.

    利用django开发web应用,
    我们经常需要进行URL重定向,有时候还需要给URL传递额外的参数。比如用户添加文章完成后需要转到文章列表或某篇文章详情。因此熟练掌握HttpResponseDirect,
    redirect和reverse这三种方法对于Django Web开发是至关重要。以下是Django
    URL重定向的HttpResponseDirect, redirect和reverse方法的详细用法。

    HttpResponseDirect方法

    HttpResponseRedirect是django首选的URL重定向方法,在django.http模块里。该方法的第一个参数是必要的,是用来重定向的URL地址。这个URL可以是完整的链接(比如’http://www.baidu.com‘),也可以是一个不包含域名的静态链接(例如‘/index/’)。

    我们下面以新闻博客(blog)为例来看看如何使用HttpResponseDirect方法。假如我们有如下3个urls, 一个展示文章,一个添加文章,一个展示文章详情。我们需要使用该方法在视图中实现两种URL重定向:

    转向不含参数的URL: 用户添加文章完成后转向文章列表(/index/); 或

    转向包含参数的URL: 用户添加文章完成后转向文章详情(/article/2/new-day/)

    from django.urls import path, re_path
    from . import views
    
    # namespace
    app_name = 'blog'
    urlpatterns = [
       # 展示所有文章
       path('/index/', views.ArticleListView.as_view(), name='article_list'),
       # 展示文章详情
       re_path(r'^article/(?P<pk>\d+)/(?P<slug1>[-\w]+)/$',
               views.ArticleDetailView.as_view(), name='article_detail'),
       # 添加文章
       re_path(r'^article/create/$',
               views.ArticleCreateView.as_view(), name='article_create'),
    ]
     
    
    1. 在视图views.py中利用HttpResponse重新定向至不含参数的URL
    from .models import Article,
    from django.http import HttpResponseRedirect
    from django.shortcuts import render
    from .forms import ArticleForm
    
    def article_create(request):
       if request.method == 'POST':
           form = ArticleForm(request.POST)
           if form.is_valid():
               form.save()  
               return HttpResponseRedirect("/index/")
       else:
           form = ArticleForm()
       return render(request, 'blog/article_create_form.html', {'form': form})
    

    如果/index/页面有分页功能, 你还可以通过使用HttpResponseRedirect(’/index/?page=2’)直接获取第2页的文章列表。

    HttpReponseDirect只支持hard coded urls(硬编码链接), 不能直接使用命名的URL,如使用HttpResponseDirect(‘blog:article_list‘)是错误的。在使用URL命名时,我们需要先通过URL反向解析方法reverse先对命名URL(article_list)进行解析,然后再使用HttpReponseRedirect定向(如下面的代码)。背后的逻辑是reverse(‘blog:article_list’)=’/index/’。

    from django.http import HttpResponseRedirect
    from django.urls import reverse
    .....
    
    def article_create(request):
       if request.method == 'POST':
           form = ArticleForm(request.POST)
           if form.is_valid():
               form.save()
               return HttpResponseRedirect(reverse('blog:article_list'))
      
    
    1. 在视图views.py中利用HttpResponseDirect重新定向至包含参数的URL

    对于包含参数的URL(/article/2/new-day/),使用HttpResponseDirect定向前一般需要先使用reverse方法对命名的URL(如’article_detail’)进行解析,同时传递参数(如id, slug等)。

    from .models import Article
    from django.http import HttpResponseRedirect
    from django.urls import reverse
    from django.shortcuts import render
    from .forms import ArticleForm
    
    def article_create(request):
       if request.method == 'POST':
           form = ArticleForm(request.POST)
           if form.is_valid():
               article = form.save()
               return HttpResponseRedirect(reverse('blog:article_detail', args=[str(article.pk), article.slug]))
       else:
           form = ArticleForm()
       return render(request, 'blog/article_create_form.html', {'form': form})
    

    其中最重要的一行代码如下所示。大家可以仔细看下参数是如何传递到url的。

    reverse('blog:article_detail', args=[str(article.pk), article.slug]
    

    redirect方法

    redirect是URL重新定向的便捷方法,在django.shortcuts模块里。HttpResponseRedirect能支持的URL重定向,redirect都支持。比如下面3种重定向是redirect的常规用法。

    from django.shortcuts import redirect
    from django.urls import reverse
    
    # 案例1
    def my_view(request):
       ...
       return redirect('/index/')
    
    # 案例2
    def my_view(request):
       ...
       return redirect('https://www.baidu.com/')
    
    # 案例3
    def my_view(request):
       ...
       return redirect(reverse('blog:article_list'))
    

    redirect真正NB的地方在于,它不仅能根据URL重定向,还可以根据对象Object重定向和根据视图view重定向,根据视图重定向的时候还可以传递额外的参数。

    1. 根据对象Object重定向

    使用该方法的前提是模型里已经定义了get_asbolute_url方法,使用redirect会自动调用get_absolute_url方法。

    from django.shortcuts import redirect
    
    def my_view(request):
       ...
       obj = MyModel.objects.get(...)
       return redirect(obj)
    
    1. 根据视图view重定向

    使用该方法的前提已对URL进行了命名,且对应了相应的视图。下面案例中redirect会先根据视图函数的名字查找对应url,在传递额外参数。后台工作还是由reverse方法来完成的。

    def my_view(request):
       ...
       return redirect('some-view-name', foo='bar')
     
    

    reverse方法

    reverse方法的作用是对已命名的URL进行反向解析,还传递相应的参数(args或带key的参数kargs)。该方法位于django.urls模块。reverse方法一般有2种应用场景:

    在模型中自定义get_absolute_url时使用,传递参数

    在视图中对命名URL进行解析,传递参数,再使用HttpResponseDirect和redict进行重定向

    1. 模型中自定义get_absolute_url,并传递参数args
    def get_absolute_url(self):
       return reverse('blog:article_detail', args=[str(self.pk), self.slug])
    
    1. 在视图中配合URL重定向使用,并传递kargs
    from django.urls import reverse
    from django.shortcuts import redirect
    
    def my_view(request):
       ...
       return redirect(reverse('admin:app_list', kwargs={'app_label': 'auth'}))
    

    还有一点容易被人们忽略的是reverse方法不仅能对命名的urls进行反向解析,还可以对视图函数进行反向解析,找到需要重新定向的url, 如下面代码所示。当然但这个方法我们并不推荐使用。与此功能相反的是resolve方法,该方法可以根据url找到对应视图函数。

    from django.urls import reverse
    from blog import views
    reverse(views.index)

    总结:

    HttpResponseDirect, redirect和reverse三个方法都非常常用,在使用它们前忘了import进来哦。注意它们在不同的模块。

    HttpResponseDirect - django.http

    redirect - django.shortcuts

    reverse - django.urls

    展开全文
  • Ext Direct

    2010-06-01 17:50:48
    Ext.direct,JavaScript中称之为Comet Reverse Ajax,对Java程序来说,JMS机制一样,就是将服务器端信息推送到客户端,JMS推送到Java应用,而Ext.direct推送到是客户端浏览器。如何向在浏览器端实现订阅,通常...
    Ext.direct可能是ExtJS 3.0版本比较热门的特性,现在不少人都在关注。Ext.direct,JavaScript中称之为Comet 和 Reverse Ajax,对Java程序来说,和JMS机制一样,就是将服务器端信息推送到客户端,JMS推送到Java应用,而Ext.direct推送到是客户端浏览器。如何向在浏览器端实现订阅,通常是通过Applet,ActiveX和Flash实现,当然ExtJS是通过一个flash组件完成的,这个也是目前实现Comet的通行做法。Ext.direct特性对Web开发帮助非常大,之前要实现信息实施更新,基本都是定时刷新,而Ext.direct和 Comet技术,可以实现消息订阅和推送,那么这种实时消息提醒就非常方便,如聊天室,监控系统,耗时较长的操作等,这些实现起来就非常简单啦。
    

    感觉EXT3.x增加的最好的功能之一就是这个Ext.Direct了,它实现了类似于DWR的功能,把方法暴露在服务端以便直接在前端像类一样使用后台的方法,可以使用户不再关注ajax的request和response的处理了。。而且很好地直接使用了json格式,不需要我们自己来转换,不过现在为止除了和EXT框架整合比较方便意外,我觉得其他功能还有待改善,并不能替代DWR在JAVA-AJAX之间使用的地位,嘛...毕竟是新东西,值得学习一下!



    1.去下载源代码,EXT官方并没有对java的支持。。。很囧,php都支持了啊。。。好吧找到google code的一个开源项目来支持java,下载地址:http://code.google.com/p/directjngine/downloads /list 导入里面的lib包里的jar以及最关键的deliverables/directjngine.1.2.jar



    2.可以写个java类了:

    TestDirect.java:
    Java代码

    1. package com.xuyi.web.direct;
    2.
    3. import com.softwarementors.extjs.djn.config.annotations.DirectMethod;
    4. import com.xuyi.vo.User;
    5.
    6. /**
    7. * @author xuyi
    8. *
    9. */
    10. public class TestDirect {
    11. //注意注解
    12. @DirectMethod
    13. public String testData(String data){
    14. return data;
    15. }
    16.
    17. @DirectMethod
    18. public User testUser(){
    19. User user = new User();
    20. user.setUsername("xuyi");
    21. user.setPassword("123");
    22. user.setAge(28);
    23. return user;
    24. }
    25.
    26. }

    package com.xuyi.web.direct;

    import com.softwarementors.extjs.djn.config.annotations.DirectMethod;
    import com.xuyi.vo.User;

    /**
    * @author xuyi
    *
    */
    public class TestDirect {
    //注意注解
    @DirectMethod
    public String testData(String data){
    return data;
    }

    @DirectMethod
    public User testUser(){
    User user = new User();
    user.setUsername("xuyi");
    user.setPassword("123");
    user.setAge(28);
    return user;
    }

    }

    3.用到的User对象:

    User.java:
    Java代码

    1. package com.xuyi.vo;
    2.
    3. /**
    4. * @author xuyi
    5. *
    6. */
    7. public class User {
    8.
    9. private String username;
    10.
    11. private String password;
    12.
    13. private int age;
    14.
    15. public int getAge() {
    16. return age;
    17. }
    18.
    19. public void setAge(int age) {
    20. this.age = age;
    21. }
    22.
    23. public String getPassword() {
    24. return password;
    25. }
    26.
    27. public void setPassword(String password) {
    28. this.password = password;
    29. }
    30.
    31. public String getUsername() {
    32. return username;
    33. }
    34.
    35. public void setUsername(String username) {
    36. this.username = username;
    37. }
    38.
    39.
    40. }

    package com.xuyi.vo;

    /**
    * @author xuyi
    *
    */
    public class User {

    private String username;

    private String password;

    private int age;

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {
    this.password = password;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }


    }

    4.OK,后台准备就绪,开始进行配置吧,先在web.xml里面进行相关的配置,这个不用多说,DWR也一样要配servlet,具体看注释吧:

    web.xml中加入如下代码:
    Xml代码

    1. <servlet>
    2. <servlet-name>action</servlet-name>
    3. <servlet-class>
    4. org.apache.struts.action.ActionServlet
    5. </servlet-class>
    6. <init-param>
    7. <param-name>config</param-name>
    8. <param-value>
    9. /WEB-INF/conf/struts/struts-config.xml
    10. </param-value>
    11. </init-param>
    12. <init-param>
    13. <param-name>debug</param-name>
    14. <param-value>3</param-value>
    15. </init-param>
    16. <init-param>
    17. <param-name>detail</param-name>
    18. <param-value>3</param-value>
    19. </init-param>
    20. <load-on-startup>0</load-on-startup>
    21. </servlet>
    22.
    23. <servlet>
    24. <servlet-name>DjnServlet</servlet-name>
    25. <servlet-class>
    26. com.softwarementors.extjs.djn.servlet.DirectJNgineServlet
    27. </servlet-class>
    28.
    29. <init-param>
    30. <param-name>debug</param-name>
    31. <param-value>true</param-value>
    32. </init-param>
    33.
    34. <init-param>
    35. <param-name>minify</param-name>
    36. <param-value>true</param-value>
    37. </init-param>
    38.
    39. <init-param>
    40. <param-name>providersUrl</param-name>
    41. <param-value>djn/directprovider</param-value>
    42. </init-param>
    43.
    44. <init-param>
    45. <param-name>batchRequestsMultithreadingEnabled</param-name>
    46. <param-value>false</param-value>
    47. </init-param>
    48.
    49. <!-- api域: 对应下面的各个param-name的前缀,可以设置多个不同的域-->
    50. <init-param>
    51. <param-name>apis</param-name>
    52. <param-value>test</param-value>
    53. </init-param>
    54.
    55. <!-- test.对应上面的域 test/用来安放其自动生成的js文件 -->
    56. <init-param>
    57. <param-name>test.apiFile</param-name>
    58. <param-value>test/test.js</param-value>
    59. </init-param>
    60.
    61. <!-- test.对应上面的域 命名空间会在页面加载时候用上 -->
    62. <init-param>
    63. <param-name>test.apiNamespace</param-name>
    64. <param-value>Ext.xuyi</param-value>
    65. </init-param>
    66.
    67. <!-- test.对应上面的域 类的具体包路径 -->
    68. <init-param>
    69. <param-name>test.classes</param-name>
    70. <param-value>com.xuyi.web.direct.TestDirect</param-value>
    71. </init-param>
    72.
    73. <load-on-startup>1</load-on-startup>
    74. </servlet>
    75. <!-- 默认servlet路径 -->
    76. <servlet-mapping>
    77. <servlet-name>DjnServlet</servlet-name>
    78. <url-pattern>/djn/directprovider/*</url-pattern>
    79. </servlet-mapping>

    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>
    org.apache.struts.action.ActionServlet
    </servlet-class>
    <init-param>
    <param-name>config</param-name>
    <param-value>
    /WEB-INF/conf/struts/struts-config.xml
    </param-value>
    </init-param>
    <init-param>
    <param-name>debug</param-name>
    <param-value>3</param-value>
    </init-param>
    <init-param>
    <param-name>detail</param-name>
    <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    </servlet>

    <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的前缀,可以设置多个不同的域-->
    <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.xuyi.web.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>

    5.页面使用:

    test_direct_1.jsp:
    Html代码

    1. <%@ page language="java" pageEncoding="UTF-8"%>
    2. <html>
    3. <head>
    4. <title>Ext3 Direct功能示例</title>
    5. <script type="text/javascript" src="${ctxPath }/scripts/ext/ext-base.js"></script>
    6. <script type="text/javascript" src="${ctxPath }/scripts/ext/ext-all.js"></script>
    7. <script type="text/javascript" src="${ctxPath}/test/test.js"></script>
    8. </head>
    9. <body>
    10. <script type="text/javascript">
    11. //Register provider
    12. //use namespace Ext.xuyi
    13. Ext.xuyi.REMOTING_API.enableBuffer = 0;
    14. Ext.Direct.addProvider(Ext.xuyi.REMOTING_API);
    15. //hello function
    16. hello=function(){
    17. TestDirect.testData("hello,Ext Direct!",function(data){
    18. console.log(data);
    19. alert(data);
    20. });
    21. }
    22. //user function
    23. user=function(){
    24. TestDirect.testUser(function(data){
    25. console.log(data);
    26. alert("username:" + data.username+" password:"+data.password+" age:"+data.age);
    27. });
    28. }
    29.
    30. </script>
    31. <input type="button" value="hello" οnclick="hello();">
    32.
    33. <input type="button" value="user" οnclick="user();">
    34.
    35. </body>
    36. </html>

    <%@ page language="java" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>Ext3 Direct功能示例</title>
    <script type="text/javascript" src="${ctxPath }/scripts/ext/ext-base.js"></script>
    <script type="text/javascript" src="${ctxPath }/scripts/ext/ext-all.js"></script>
    <script type="text/javascript" src="${ctxPath}/test/test.js"></script>
    </head>
    <body>
    <script type="text/javascript">
    //Register provider
    //use namespace Ext.xuyi
    Ext.xuyi.REMOTING_API.enableBuffer = 0;
    Ext.Direct.addProvider(Ext.xuyi.REMOTING_API);
    //hello function
    hello=function(){
    TestDirect.testData("hello,Ext Direct!",function(data){
    console.log(data);
    alert(data);
    });
    }
    //user function
    user=function(){
    TestDirect.testUser(function(data){
    console.log(data);
    alert("username:" + data.username+" password:"+data.password+" age:"+data.age);
    });
    }

    </script>
    <input type="button" value="hello" οnclick="hello();">

    <input type="button" value="user" οnclick="user();">

    </body>
    </html>
    展开全文
  • Oracle reverse函数

    千次阅读 2011-12-08 13:56:32
    Oracle reverse函数 2007-10-25 14:06 reverse函数功能就是反向排列给定的数组元素 SQL> create or replace function Re(s string) return varchar2 is Result varchar2(1000); ...
  • 除此之外,redirect还可以根据对象Object重定向根据视图view重定向,根据视图重定向的时候还可以传递额外的参数。 根据对象Object重定向,使用该方法的前提是模型里已经定义了get_asbolute_url方法,使用...
  • Reverse Proxy What is Reverse Proxy Server A reverse proxy server is an intermediate connection point positioned at a network’s edge. It receives initial HTTP connection requests, acting like the ...
  • Reverse Nodes in k-GroupDescriptionExampleNoteCodeConclusion Description Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive ...
  • DWR Reverse Ajax

    2012-12-14 15:56:00
    Direct Web Remoting Reverse Ajax ( http://directwebremoting.org/dwr/documentation/reverse-ajax/index.html ) Index the ability to asynchronously send data from a web-server to a browser. DWR ...
  • Reverse Ajax简单实例

    2010-09-02 11:07:00
    在网上找了一个老外写的dwr reverse-ajax的例子,自己把coding顺序调整了一下希望可以对学习dwr reverse-ajax的朋友有所帮助 1、首先要下载dwr 2.0 地址 http://getahead.org/dwr/download<br /> ...
  • Direct Graph

    2020-11-05 11:00:47
    DFS dfs = new DFS(G.reverse()); for (int v: G.reversePost()) { if (!marked) { dfs(G, v); count++; } } } public void dfs(Graph G, int v) { marked[v] = true; int[v] = count; ...
  • reverse-Z问题

    2020-03-13 17:49:50
    https://www.cnblogs.com/jackmaxwell/p/6851728.html
  • 反向代理Reverse proxy

    2019-05-10 14:58:00
    to restrict or disallow direct access and force visitors to go through Y first. So, as before, we have data being retrieved by Y --> Z on behalf of X , which chains as follows: X --> Y --> Z . ...
  • 7. Reverse Integer

    2017-11-22 15:00:31
    a direct comparison if(res > Integer.MAX_VALUE || res ) return 0; So, the code should be: class Solution { public: int reverse(int x) { int res = 0; while (x != 0) { if (abs(res)...
  • 最近,DWR(Direct Web Remoting)发布了2.0的m1版本,其中最让人兴奋的新功能莫过于Reverse Ajax了。DWR的logo是两个指向不同方向的蓝红箭头,寓意应该是javascriptjava的双向异步交流,但是即使是在最新的稳定版本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,372
精华内容 3,348
关键字:

directreverse和