精华内容
下载资源
问答
  • 一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论...

    一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了能够把代码放在某个地方,惯例是把视图放在叫做views.py的文件中,然后把它放到你的项目或者应用目录里。

    http请求-响应过程中有两个核心对象:
    http请求对象:HttpRequest
    http响应对象:HttpResponse

    view视图模块,主要要三种返回方法:
    render :通过template模板渲染到html 返回
    HttpResponse :不通过template 直接返回,通常用来返回数据
    ,redirect:重定向路由,相当于跳转

    首先我们在url.py中定义url入口:

    from django.conf.urls import url,include
    from django.contrib import admin
    from bbsAPP import views
    '''任何usl都会从这里匹配'''
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        ##调用render
        url(r'^login/$', views.login),
        #调用redirect
        url(r'^jump/$', views.jump),
        #调用HttpResponse
        url(r'^t1', views.testHttpResponse),
        url(r'^api/', include('apiAPP.urls')),
    ]
    

    其次我们在view视图中,写对应逻辑

    from django.shortcuts import render,HttpResponse,redirect
    from bbsAPP import models
    # Create your views here.
    def jump(request):
        print ("this is redirect")
        #页面跳转,重定向到login路由
        return redirect('/login/')
    
    def testHttpResponse(request):
        return HttpResponse('this is httpResonse')
    
    def login(request):
        a = ['hello django','liaochao']
        if request.method == 'GET':
            #将userinfo中所有的数据拿过来
            test = 'te st'
            import datetime
            d = datetime.datetime.now()
            obj_list = models.Userinfo.objects.all()
            # obj_list = models.Userinfo.objects.filter(username='liaochao')  #拿具体某个用户的数据
            for obj in obj_list:
                print('username-->',obj.username)
                print('password-->',obj.password)
        # return HttpResponse("登录")
        return  render(request,'login.html',locals())
    

    最后我们在页面观察结果:

    HttpResponse 结果:
    在这里插入图片描述
    trender结果:
    在这里插入图片描述
    redirec结果:
    因为跳转到了login的路由,所以就是访问了127.0.0.1:8080/login ,结果跟上面一样

    展开全文
  • 1、理解视图解析 将控制器中请求处理的逻辑和视图中的渲染实现解耦是Spring MVC 的一个重要特性。如果控制器中的方法直接负责产生HTML的话,就很难在不影响请求处理逻辑的前提下,维护和更新视图。控制器方法和...

    1、理解视图解析

    将控制器中请求处理的逻辑和视图中的渲染实现解耦是Spring MVC 的一个重要特性。如果控制器中的方法直接负责产生HTML的话,就很难在不影响请求处理逻辑的前提下,维护和更新视图。控制器方法和视图的实现会在模型内容上达成一致,这是两者的最大关联,除此之外,两者应该保持足够的距离。但是,如果控制器只通过逻辑视图来了解视图的话,那Spring该如何确定使用哪一个视图实现来渲染模型呢?这就是Spring视图解析器的任务了。 在之前的章节中,我们使用名为InternalResourceViewResolver的视图解析器。在它的配置中,为了得到视图的名字,会使用”/WEB-INF/views/”前缀和”.jsp”后缀,从而确定来渲染模型的JSP文件的物理位置。现在,我们回过头来看看视图解析器的基础知识以及Spring提供的其他视图解析器。

    Spring MVC 定义了一个名为ViewResolver的接口,它大致如下所示:

    public interface ViewResolver {
        View resolveViewName(String viewName, Locale locale) throws Exception;
    }

    ViewResolver 方法,当提供一个 viewName 和 locale 以后,返回一个 View 实体。View 是另外一个接口:

    package org.springframework.web.servlet;
    public interface View {
        String getContentType();
        void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception;
    
    }

    View 接口的作用就是利用 model 数据,还有 request 和 response 对象渲染视图内容,然后返回给 response。 当然你在实际使用的过程中不会接触到这些内部的接口,因为 Spring 提供了很多视图技术的支持:FreeMarkerViewResolver, InternalResourceViewResolver, VelocityViewResolver等。

    Spring 4和Spring 3.2支持表中的所有视图解析器。Spring 3.1支持除Tiles 3 TilesViewResolver之外的所有视图解析器。 Spring 3.2及更高版本支持上表中所有的视图解析器,虽然以下视图解析器有13种之多,但是java常用的也就下面几种: 其中最常用的当数InternalResourceViewResolver啦,常用它作为JSP的视图解析器,TilesViewResolver用于解析Apache Tiles视图,TreeMarkerViewResolver作为TreeMaker的视图解析器;VelocityViewResolver作为Velocity模板视图。通常JavaWeb项目会选择JSP作为视图层,所以InternalResourceViewResolver在JavaWeb项目中使用较为广泛。 最后还有一种视图Thymeleaf是一种替代JSP的新兴技术,Spring提供了Thymeleaf的原生模板(naturaltemplate)协作的视图解析器。

    视图解析器描述
    BeanNameViewResolver将视图解析为Spring应用上下文中的bean,其中bean的ID与视图的名字相同
    ContentNegatiatingViewResolver通过考虑客户端需要的内容类型来解析视图,委托给另外一个能给产生对应内容的视图解析器
    FreeMarkerViewResolver将视图解析为FreeMaker模板
    InternalResourceViewResolver将视图解析为Web应用的内部资源(一般为JSP)
    JasperReportsViewResolver将视图解析为JasperReports定义
    ResourceBundleViewResolver将视图解析为资源bundle(一般为属性文件)
    TilesViewResolver将视图解析为Apache Tile定义,其中tile ID与视图名称相同,主义有两个不同的TilesViewResolver实现,分别对应于Tiles2.0和tiles3.0
    UrlBasedViewResolver直接根据视图名称解析视图,视图的名称会匹配一个物理视图的定义
    VelocityLayoutViewResolver将视图解析为Velocity布局,从不同的Velocity模板中组合页面
    VelocityViewResolver将视图解析为Velocity模板
    XmlViewResolver将视图解析为特定XML文件中的bean定义。类似于BeanNameViewResolver
    XsltViewResolver

    将视图解析为XSLT转化后得结果

     


     

    2、InternalResourceViewResolver解析JSP视图

    Spring提供了两种支持JSP视图的方式:

    • InternalResourceViewResolver会将视图名解析为JSP文件。另外,如果在JSP页面中使用了JSP标准签库(JavaServer Pages Standard Tag library,JSTL)的话,InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting)和信息(message)标签
    • Spring提供了连个JSP标签库,一个用于表单到模型的绑定,另一个提供了通用的工具类特性

    配置适用于JSP的视图解析器

    有一些视图解析器,如ResourceBundleViewResolver会直接将逻辑视图名映射为特定 的View接口实现,而InternalResourceViewResolver所采取的方式并不那么直接。它 遵循一种约定,会在视图名上添加前缀和后缀,进而确定一个Web应用中视图资源的物理路径。

    作为样例,考虑一个简单的场景,假设逻辑视图名为home。通用的实践是将JSP文件放到Web 应用的WEB-INF目录下,防止对它的直接访问。如果我们将所有的JSP文件都放在“/WEBINF/views/”目录下,并且home页的JSP名为home.jsp,那么我们可以确定物理视图的路径就是 逻辑视图名home再加上“/WEB-INF/views/”前缀和“.jsp”后缀。

    当使用@Bean注解的时候,我们可以按照如下的方式配置Internal-ResourceView Resolver,使其在解析视图时,遵循上述的约定。

        @Bean
        public ViewResolver viewResolver() {
            // 配置JSP视图解析器
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setPrefix("/WEB-INF/views/");
            resolver.setSuffix(".jsp");
            return resolver;
        }

    InternalResourceViewResolver配置就绪后,它就会将逻辑视图名解析为JSP文件,如下所示:

    home将会解析为”/WEB-INF/views/home.jsp”
    userList将会解析为”/WEB-INF/views/userList.jsp”
    goods/detail将会解析为”/WEB-INF/views/goods/detail.jsp”
    当逻辑视图名中包含斜线时,这个斜线也会带到资源的路径中。因此,它会对应到prefix属性所引用目录的子目录下的JSP文件。这样的话,我们就可以很方便地将视图模板组织为层级目录结构,而不是将它们都放到同一个目录之中。

    代替方案:

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
    

     3、配置Tiles视图解析器

    首先需要配置TilesConfigurer的bean,它负责定位和加载Tile定义并协调生成Tiles,再者需要TilesViewResolver的bean将逻辑视图名称解析为Tile定义。​​

        @Bean
        public TilesConfigurer tilesConfigurer() {
            TilesConfigurer tilesConfigurer = new TilesConfigurer();
            // 也可以使用通配符“/WEB-INF/**/tiles.xml”
            tilesConfigurer.setDefinitions("/WEB-INF/layout/tiles.xml");
            tilesConfigurer.setCheckRefresh(true);
    
            return tilesConfigurer;
        }

    然后再定义tiles.xml文件和对应的文件即可。

    4、配置Thymeleaf视图解析器

    需要配置如下三个bean。

    • ThymeleafViewResolver,将逻辑视图名解析为Thymeleaf模版视图。
    • SpringTemplateEngine,处理模板并渲染结果。
    • TemplateResolver,加载Thymeleaf模板。

    添加bean至WebConfig中如下:

        @Bean
        public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
            // 视图解析器
            ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
            viewResolver.setTemplateEngine(templateEngine);
            return viewResolver;
        }
        @Bean
        public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
            // 模板引擎
            SpringTemplateEngine templateEngine = new SpringTemplateEngine();
            templateEngine.setTemplateResolver(templateResolver);
            return templateEngine;
        }
    
        @Bean
        public TemplateResolver templateResolver() {
            // 模板解析器
            TemplateResolver templateResolver = new ServletContextTemplateResolver();
            templateResolver.setPrefix("/WEB-INF/views/");
            templateResolver.setSuffix(".html");
            templateResolver.setTemplateMode("HTML5");
            return templateResolver;
        }

    在SpringBoot中集成Thymeleaf

    pom文件:

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    配置application.properties 

    # thymeleaf
    spring.thymeleaf.prefix=classpath:/templates/
    spring.thymeleaf.check-template-location=true
    spring.thymeleaf.suffix=.html
    spring.thymeleaf.encoding=UTF-8
    spring.thymeleaf.servlet.content-type=text/html
    spring.resources.static-locations=classpath:/static/,classpath:/templates/
    spring.thymeleaf.mode=HTML5
    spring.thymeleaf.cache=false

    然后根据配置创建templates文件夹,.html文件即可。

    5、thymeleaf 常用的表达式:

    官网文档:

    https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#using-thtext-and-externalizing-text

     

     

     

     

    展开全文
  • CakePHP 2.x CookBook 中文版 第视图

    千次阅读 2013-01-30 15:50:34
    视图 视图是 MVC 中的 V。 视图负责为请求生成指定的输出。常用的格式有 HTML、XML 或者 JSON,不过用户可以下载的流文件和 PDF 文件也可以由视图层提供。 CakePHP 为多数常用的渲染情况提供了一些内置的视图...

    视图

    视图是 MVC 中的 V。 视图负责为请求生成指定的输出。常用的格式有 HTML、XML 或者 JSON,不过用户可以下载的流文件和 PDF 文件也可以由视图层提供。

    CakePHP 为多数常用的渲染情况提供了一些内置的视图类: :

    • 可以使用 JSON 和 XML 视图. 建立 XML 或者 JSON webservices
    • 可以使用 媒体视图 提供受保护的文件,或者动态生成文件
    • 可以使用 主题 生成多主题视图

    视图模板

    CakePHP 的视图层决定你如何向用户展示。 多数时候,视图在浏览器中显示 (X)HTML 文档,也可能会需要给 Flash 对象提供 AMF 数据,以 SOAP 形式回复远程应用程序,或者为用户输出一个 CSV 文件。

    CakePHP 的默认视图文件是以 .ctp(CakePHP TempLate)为扩展名的纯 PHP 文件。这些文件包含了所有的从控制器获取的准备以某种格式提供给你的观众的数据的呈献逻辑。如果你喜欢使用类似 Twig 或者 Smarty 这样的模板语言,可以使用 View 的一个子类来桥接 CakePHP 和你的模板语言。

    视图存储在 /app/View/ ,所有文件都放在以控制器命名的子文件夹中,文件名则是以动作命名的。例如,Products 控制器的 “view()” 动作的视图通常是 /app/View/Products/view.ctp

    CakePHP 的视图层可以由不同的部分构成。每一部分有不同的用途,将在下面的章节中介绍:

    • views:视图是动作运行的唯一的页面部分。它们构成了应用程序的响应。
    • elements:小的可重用的视图代码。元件通常在视图内部渲染。
    • layouts: 应用程序中打包了呈献逻辑的一些视图接口文件。多数视图在布局内部渲染。
    • helpers:这些类包装了视图层的许多地方都使用的视图逻辑。除了其它事项,CakePHP 的助手帮助你建立表单、构建 AJAX 功能、分页模型数据,或者提供 RSS feed。

    继承视图

    2.1 新版功能.

    视图继承允许你在一个视图中包含另一个视图。使用 视图块 进行绑定提供了保持视图 DRY 的强劲手段。例如,应用程序中有一个边栏,它在特定的视图中需要呈献不同的内容。通过继承一个共用的视图文件,你无需重复边栏中共有的标记,只需要定义改变的部分:

     1 // app/View/Common/view.ctp
     2 <h1><?php echo $this->fetch('title'); ?></h1>
     3 <?php echo $this->fetch('content'); ?>
     4 
     5 <div class="actions">
     6     <h3>Related actions</h3>
     7     <ul>
     8 <?php echo $this->fetch('sidebar'); ?>
     9     </ul>
    10 </div>

    上面的视图文件可以作为父视图。它需要继承它的视图定义 sidebar 和 title 块。它将包含继承视图中所有未捕获的内容。假设我们的视图文件有一个带有帖子数据的 $posts 变量,我们的视图看起来将是这个样子的:

     1 <?php
     2 // app/View/Posts/view.ctp
     3 $this->extend('/Common/view');
     4 
     5 $this->assign('title', $post);
     6 
     7 $this->start('sidebar');
     8 ?>
     9 <li>
    10 <?php
    11 echo $this->Html->link('edit', array(
    12     'action' => 'edit',
    13     $post['Post']['id']
    14 )); ?>
    15 </li>
    16 <?php $this->end(); ?>
    17 
    18 // 剩余的内容将以父视图中的 'content' 块的形式生效
    19 <?php echo h($post['Post']['body']);

    上面显示的这个帖子视图展示了如何继承一个视图,并且植入一个块集。块中未定义的内容将被捕捉并放入一个叫做content 的特殊块。当一个视图包含一个 extend() 调用,其将一直执行到当前文件的结尾。一旦它完成,被继承的视图被渲染。一个视图调用 extend() 超过一次, 将用后一个父视图覆盖前一个父视图:

    1 $this->extend('/Common/view');
    2 $this->extend('/Common/index');

    上面的代码中, `` /Common/index.ctp`` 将作为当前视图的父视图。

    必要时,你可以嵌套继承视图。如果需要,每个视图都能被另一个视图继承。每个父视图将获得前一个视图的内容,当作自己的 content 块。

    注解

    你应该在应用程序中避免使用 content 作为块名。CakePHP 用它作为继承视图中未捕获的内容块。

    使用视图块

    2.1 新版功能.

    视图块放在 $scripts_for_layout,并提供一个允许你在视图/布局中任意位置定义插槽或者块的灵活的 API。 块是实现类似边栏这样的东东的理想方法,或者是在布局的头/尾加载资源的好地方。块有两种定义方式:作为捕获块,或者通过直接赋值。start()、 append() 和 end() 方法是和捕获块一同工作的:

     1 // 建立一个边栏块
     2 $this->start('sidebar');
     3 echo $this->element('sidebar/recent_topics');
     4 echo $this->element('sidebar/recent_comments');
     5 $this->end();
     6 
     7 
     8 // 随后添加一个边栏
     9 $this->append('sidebar');
    10 echo $this->element('sidebar/popular_topics');
    11 $this->end();

    也可以多次使用 start() 添加进一个块。 任何时候都可以使用 assign() 清除或者覆盖一个块:

    1 // 清除之前定义的边栏块的内容。
    2 $this->assign('sidebar', '');

    在 2.3 版本中,新加了几个与块一同工作的方法。prepend() 预置一个已存在的块的内容:

    1 // 预置到边栏。
    2 $this->prepend('sidebar', 'this content goes on top of sidebar');

    startIfEmpty() 方法在一个块为空或者未定义时生成一个块。如果块已经存在,则 startIfEmpty() 定义的内容被忽略。当你想要在块不存在时为其定义默认内容时,可以使用这一方法::

     1 // 在视图文件中。
     2 // 创建一个导航栏块。
     3 $this->startIfEmpty('navbar');
     4 echo $this->element('navbar');
     5 echo $this->element('notifications');
     6 $this->end();
     7 
     8 // 在父视图/布局中。
     9 $this->startIfEmpty('navbar');
    10 Default content
    11 $this->end();
    12 
    13 echo $this->fetch('navbar');

    上面的例子中,navbar 块包含在第一部分中添加的内容。一旦在子视图中定义了这个块,其默认内容将被忽略。

    注解

    应该避免使用 content 作块名。它被用于 CakePHP 的内部视图和继承视图,以及布局视图内容中。

    显示块

    2.1 新版功能.

    可以使用 fetch() 方法显示块。 fetch 将安全地输出一个块,如果块不存在,就返回 ‘’。

    1 echo $this->fetch('sidebar');

    还可以根据一个块是否存在来决定是否显示其内容。要想在布局、继承视图文件中有条件的显示头或者其它标签时,这种方法非常有用:

    1 // 在 app/View/Layouts/default.ctp 中
    2 <?php if ($this->fetch('menu')): ?>
    3 <div class="menu">
    4     <h3>Menu options</h3>
    5 <?php echo $this->fetch('menu'); ?>
    6 </div>
    7 <?php endif; ?>

    在 2.3.0 版,还可以在块没有内容时为其提供默认值。这使为空状态添加占位符变得更容易。可以使用两个参数提供默认值:

    1 <div class="shopping-cart">
    2     <h3>Your Cart</h3>
    3 <?php echo $this->fetch('cart', 'Your cart is empty');
    4 </div>

    在 2.3 版更改: $default 添加于 2.3 版。

    使用 script 和 CSS 文件块

    2.1 新版功能.

    块替代了被废弃的 $scripts_for_layout 布局变量。HtmlHelper 关联到视图块,它的 script() 、 css() 和 meta()方法在与 inline = false 选项共同使用时使用相同的相同的名字更新一个块。

     1 <?php
     2 // 在视图文件中。
     3 $this->Html->script('carousel', array('inline' => false));
     4 $this->Html->css('carousel', null, array('inline' => false));
     5 ?>
     6 
     7 // 在布局文件中。
     8 <!DOCTYPE html>
     9 <html lang="en">
    10     <head>
    11     <title><?php echo $this->fetch('title'); ?></title>
    12 <?php echo $this->fetch('script'); ?>
    13 <?php echo $this->fetch('css'); ?>
    14     </head>
    15     // 下面是剩余的布局尊容...

    HtmlHelper 还允许你控制使用哪个 scripts 和 CSS 块:

    1 // 在视图文件中。
    2 $this->Html->script('carousel', array('block' => 'scriptBottom'));
    3 
    4 // 在布局文件中。
    5 echo $this->fetch('scriptBottom');

    布局

    布局包含围绕视图的展示代码。想要在视图中看到的所有内容都将被放在布局中。

    布局文件放在 /app/View/Layouts 中。CakePHP 的默认布局可以通过在 /app/View/Layouts/default.ctp 中建立一个新的默认布局来覆盖。 一旦一个新的默认布局被建立,当页被渲染时,控制器渲染的视图代码就被放在默认视图中。

    当你创建一个布局,你需要告诉 CakePHP 你的视图代码放在哪儿了。要做到这一点,确保你的布局中包含了 $this->fetch('content')。下面是一个默认布局的示例:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4 <title><?php echo $title_for_layout?></title>
     5 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
     6 <!-- Include external files and scripts here (See HTML helper for more info.) -->
     7 <?php
     8 echo $this->fetch('meta');
     9 echo $this->fetch('css');
    10 echo $this->fetch('script');
    11 ?>
    12 </head>
    13 <body>
    14 
    15 <!-- If you'd like some sort of menu to
    16 show up on all of your views, include it here -->
    17 <div id="header">
    18     <div id="menu">...</div>
    19 </div>
    20 
    21 <!-- Here's where I want my views to be displayed -->
    22 <?php echo $this->fetch('content'); ?>
    23 
    24 <!-- Add a footer to each displayed page -->
    25 <div id="footer">...</div>
    26 
    27 </body>
    28 </html>

    注解

    在 2.1 版之前,fetch() 方法无效。fetch('content') 是 2.0 版中 $scripts+for_layout 变量里包含的$content_for_layout 和 fetch('meta')fetch('css')fetch('script') 行的替代品。

    script、 css 和 meta 块包含所有使用内置 HTML 助手定义在定义在视图中的内容。用于包含来自视图的 javascript 和 CSS 文件。

    注解

    当在视图文件中使用 HtmlHelper::css() 或 HtmlHelper::script() 时,将 ‘inline’ 设置为 ‘false’,将在一个带有相同名字的块中放置 html 源代码。(更多的详细信息和用法请参见 API)

    content 块包含渲染视图的内容。

    $title_for_layout 包含页面标题。这个变量是自动生成的,不过你能够通过在控制器/视图中设置它的值来覆盖其自动生成的默认值。

    要设置布局的标题,最简单的办法是在控制器中设置 $title_for_layout 变量:

    1 class UsersController extends AppController {
    2     public function view_active() {
    3         $this->set('title_for_layout', 'View Active Users');
    4     }
    5 }

    也可以在视图文件中设置 title_for_layout 变量:

    1 $this->set('title_for_layout', $titleContent);

    可以根据自己的愿望建立许多布局:把它们放进 app/View/Layouts 目录, 然后在控制器动作中使用控制器或者视图的$layout 属性在不同布局间切换:

    1 // 通过控制器的布局属性
    2 public function admin_view() {
    3     // stuff
    4     $this->layout = 'admin';
    5 }
    6 
    7 // 通过视图的布局属性
    8 $this->layout = 'loggedin';

    举例来说,假设我的站点包含一个小的广告条,我可能会创建一个带有小型广告空间的新布局,并把它指定为所有的控制器方案都使用的一部分:

     1 class UsersController extends AppController {
     2     public function view_active() {
     3         $this->set('title_for_layout', 'View Active Users');
     4         $this->layout = 'default_small_ad';
     5     }
     6 
     7     public function view_image() {
     8         $this->layout = 'image';
     9         //output user image
    10     }
    11 }

    除了 CakePHP 的默认布局,CakePHP 还包含两可以在你的应用程序中使用的核心布局: ‘ajax’ 和 ‘flash’。 Ajax 布局便于生成 Ajax 响应 - 它是一个空布局(很多 ajax 调用的返回中仅仅包含那么几个标签,不需要完整的渲染接口)。 Flash 布局用于借助 Controller::flash() 方法显示消息。

    内核中的另外三个视图,xml,js 和 rss,是提供非 text/html 内容的简捷方法。

    使用插件中的布局

    2.1 新版功能.

    如果你想使用插件中的布局,可以用 插件语法。 例如,使用 Contacts 插件中的 contact 布局:

    1 class UsersController extends AppController {
    2     public function view_active() {
    3         $this->layout = 'Contacts.contact';
    4     }
    5 }

    元素

    很多应用程序都有需要在多个页面重复使用的处理显示的代码块,有时是在布局的不同地方。 CakePHP 能够帮助你在站点中重用这些重复部分。这些可重用的部分被称为 元素。广告、帮助、导航控制、扩展菜单、登录表单和标注,在 CakePHP 中常常被实现为元素。 一个元素基本上是一个能够被包含在其它视图、布局,甚至其它元素中的迷你视图。 元素可以使视图的可读性更好,重复的元素被放在自己的文件中。它们能帮助你在应用程序中重用内容片断。

    元素放在 /app/View/Elements/ 文件夹,使用 .ctp 作为文件扩展名。 在视图中使用 element 方法输出元素:

    1 echo $this->element('helpbox');

    向元素传递变量

    可以通过 element 方法的第二个参数向元素传递数据:

    1 echo $this->element('helpbox', array(
    2     "helptext" => "Oh, this text is very helpful."
    3 ));

    在元素文件中,所有传递过来的变量被当作参数数组的成员变量(与和视图文件一起工作的控制器中的Controller::set() 方法设置的变量相同)。在上例中, /app/View/Elements/helpbox.ctp 文件可以使用 $helptext变量:

    1 // 在 app/View/Elements/helpbox.ctp 中
    2 echo $helptext; //输出 "Oh, this text is very helpful."

    View::element() 方法也支持元素的选项。这些选项支持 ‘缓存’ 和 ‘回调’。例如:

    1 echo $this->element('helpbox', array(
    2         "helptext" => "This is passed to the element as $helptext",
    3         "foobar" => "This is passed to the element as $foobar",
    4     ),
    5     array(
    6         "cache" => "long_view", // 使用 "long_view" 缓存配置
    7         "callbacks" => true // 将此元素的 before/afterRender 回调设置为 true
    8     )
    9 );

    元素缓存很容易通过 Cache 类实现。可以让元素以你设置的任何缓存配置进行存储。 这为你决定在哪儿和如何长期存储元素提供了极为灵活地方法。 为达到在应用程序中缓存同一元素的不同版本的目的,可以通过使用如下格式为每个版本提供一个唯一的缓存键的方式:

    1 $this->element('helpbox', array(), array(
    2         "cache" => array('config' => 'short', 'key' => 'unique value')
    3     )
    4 );

    可以通过使用 requestAction() 来获得元素的全部优点。 requestAction() 函数从控制器动作中获取视图变量,并以数组形式返回它们。 这会使你的元素能够以真正的 MVC 风格运行。 建立一个为元素准备视图数据的控制器动作,然后在 element() 的第二个参数中调用 requestAction(),自控制器向元素提供视图变量。

    要做到这一点,在控制器中加入类似于下面的 Post 例子中的内容:

     1 class PostsController extends AppController {
     2     // ...
     3     public function index() {
     4         $posts = $this->paginate();
     5         if ($this->request->is('requested')) {
     6             return $posts;
     7         } else {
     8             $this->set('posts', $posts);
     9         }
    10     }
    11 }

    然后我们就能够通过元素访问分页的 posts 模型。我们可以通过如下方式获取最后五个帖子的有序列表:

    1 <h2>Latest Posts</h2>
    2 <?php $posts = $this->requestAction('posts/index/sort:created/direction:asc/limit:5'); ?>
    3 <ol>
    4 <?php foreach ($posts as $post): ?>
    5       <li><?php echo $post['Post']['title']; ?></li>
    6 <?php endforeach; ?>
    7 </ol>

    缓存元素

    如果你提供了缓存参数,你就可以获得 CakePHP 视图缓存的好处。将其设置为 true,将会以 ‘默认’ 缓存配置缓存元素。此外,你也可以设置要使用的任意一个缓存配置。关于配置 Cache 的更多信息参见 缓存 。一个简单的缓存元素的例子:

    1 echo $this->element('helpbox', array(), array('cache' => true));

    如果你在一个视图中多次渲染了同一元素,只要确保每次手忙脚乱的 ‘key’ 参数的值是不同的即可。这将防止连续的调用会覆盖前一个元素调用的缓存结果。例如:

     1 echo $this->element(
     2     'helpbox',
     3     array('var' => $var),
     4     array('cache' => array('key' => 'first_use', 'config' => 'view_long')
     5 );
     6 
     7 echo $this->element(
     8     'helpbox',
     9     array('var' => $differenVar),
    10     array('cache' => array('key' => 'second_use', 'config' => 'view_long')
    11 );

    上面的例子保证了两个元素的缓存结果是相互隔离的。 如果你想所有的元素缓存使用同一个缓存配置,你可以通过设置 View::$elementCache 给你想使用的缓存配置的方式来保存一些重复项。在什么都不提供时,CakePHP 将使用这一配置。

    从插件请求元素

    2.0

    要从插件载入元素,使用 plugin 选项(从 1.x 版的 data 选项中移出):

    1 echo $this->element('helpbox', array(), array('plugin' => 'Contacts'));

    2.1

    如果你使用了一个插件并且希望使用其内置的元素,使用熟知的 插件语法。 如果视图被插件 控制器/动作 渲染,插件的名字将自动添加到所有要用的元素的前面,直到另一个插件名称出现。 如果插件内不存在这个元素,将会在主 APP 文件夹内寻找它:

    1 echo $this->element('Contacts.helpbox');

    如果视图是插件的一部分,你可以活略插件名。例如,如果你在 Contacts 插件的 ContactsController 中工作:

    1 echo $this->element('helpbox');
    2 //
    3 echo $this->element('Contacts.helpbox');

    是等同的,其结果是渲染了同一个元素。

    在 2.1 版更改: $options[plugin] 选项被废弃,同时添加了 Plugin.element 支持。

    建立你自己的视图类

    你可能需要建立自定义的新数据视图类型的视图类,或者向应用程序添加附加的自定义视图渲染逻辑。就像多数 CakePHP 组件视图类,有几条约定:

    • 视图文件要放在 App/View``文件夹中。例如 ``App/View/PdfView.php 。
    • 视图文件必须以 View 做后缀。例如 PdfView 。
    • 在指定要渲染的视图类名时,需要省略 View 后缀。例如 $this->viewClass = 'Pdf'; 。

    你也许需要扩展 View 以使某些东西正常工作:

    1 // 在 App/View/PdfView.php 中
    2 
    3 App::uses('View', 'View');
    4 class PdfView extends View {
    5     public function render($view = null, $layout = null) {
    6         // custom logic here.
    7     }
    8 }

    替换 render 方法会让你对如果渲染内容有更大的控制权。

    View API

    class  View

    视图方法在所有的视图、元素和布局文件中都可用。

    使用 $this->method() 调用视图方法。

    View:: set ( string $varmixed $value )

    视图有一个与控制器对象中的 set() 方法作用相同的 set() 方法。在视图文件中调用 set() 方法将向附后被渲染的布局或元素中添加变量。关于使用 set() 方法的更多信息参见 控制器方法 。

    可以在视图文件中使用:

    1 $this->set('activeMenuButton', 'posts');

    之后 $activeMenuButton 变量就可以在布局中使用了,并且它的值为 ‘posts’ 。

    View:: getVar ( string $var )

    获取视图变量 $var 的值

    View:: getVars ( )

    获取当前渲染范围内的所有有效的视图变量的列表。返回变量名组成的数组。

    View:: element ( string $elementPatharray $dataarray $options = array() )

    渲染元素或者局部视图。更多的信息和示例参见 元素 一节。

    View:: uuid ( string $objectmixed $url )

    为对象生成基于对象类型和 url 的唯一的非随机的 DOM ID。这个方法常常被助手使用,为每个元素生成唯一的 DOM ID,例如 JsHelper

    1 $uuid = $this->uuid('form', array('controller' => 'posts', 'action' => 'index'));
    2 //$uuid 包含 'form0425fe3bad'

     

    View:: addScript ( string $namestring $content )

    向内部脚本缓冲添加内容。这个缓冲在布局中是 $scripts_for_layout。当用手需要直接向布局添加 javascript 或者 css 时很有用。 谨记,从布局或者布局中的元素中添加的脚本不能补添加到 $scripts_for_layout。 此方法经常用在助手中,比如 Javascript 助手 和 Html助手 助手。

    2.1 版后已移除: 被 使用视图块 特性取代。

    View:: blocks ( )

    获取所有已定义的块的名字,返回结果为所有名字构成的数组。

    View:: start ( $name )

    开始捕获视图块。参见 使用视图块 一节的示例。

    2.1 新版功能.

    View:: end ( )

    结束最近开放的捕捉块。参见 使用视图块 一节的示例。

    2.1 新版功能.

    View:: append ( $name$content )

    以 $name 为名称向块中追加内容。参见 使用视图块 一节的示例。

    2.1 新版功能.

    View:: prepend ( $name$content )

    以 $name 为名称向块中预存内容。 参见 使用视图块 一节的示例。

    2.3 新版功能.

    View:: startIfEmpty ( $name )

    在块为空时开始一个块。如果块已经被定义,则其全部内容将被捕获并抛弃。

    2.3 新版功能.

    View:: assign ( $name$content )

    为块赋值。这会覆盖已存在的内容。参见 使用视图块 一节的示例。

    2.1 新版功能.

    View:: fetch ( $name )

    获取块的值。如果块没有定义,其值为’‘(空字符串)。 参见 使用视图块 一节的示例。

    2.1 新版功能.

    View:: extend ( $name )

    继承以 $name 命名的 视图/元素/布局。参见 使用视图块 一节的示例。

    2.1 新版功能.

    property  View::$ layout

    设置包含当前视图的布局。

    property  View::$ elementCache

    这个缓存配置用于缓存元素。设置此属性将改变默认的元素缓存配置。 此默认值可以使用 element 方法的 ‘cache’ 选项覆盖。

    property  View::$ request

    CakeRequest 的实例。使用此实例方法有关当前请求的信息。

    property  View::$ output

    包含最后渲染的视图内容(来自视图文件或者布局内容)。

    2.1 版后已移除: 被 $view->Blocks->get('content'); 代替。

    property  View::$ Blocks

    ViewBlock 的实例。用于在视图渲染中提供视图块功能。

    2.1 新版功能.

    关于视图的更多内容

    • 主题
      • Theme 部件
      • 提高插件和主题部件的运行效率
    • 媒体视图
      • 可设置的参数
    • JSON 和 XML 视图
      • 在应用程序中允许使用数据视图
      • 利用 serialize 键使用数据视图
      • 利用视图文件使用数据视图
    • 助手
      • 使用和配置助手
      • 使用助手
      • 回调方法
      • 创建助手
        • 包含其它助手
        • 使用助手
      • 为所有助手创建功能
      • 助手 API
        • 回调
      • 内核 Helpers
    展开全文
  • Oracle 物化视图

    万次阅读 2013-05-05 15:12:56
    近来看到一些文章有关Oracle 物化视图的,整合了下,比较详细,以作memo: 物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。其实无论是快照还是物化...

    近来看到一些文章有关Oracle 物化视图的,整合了下,比较详细,以作memo:



    物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。其实无论是快照还是物化视图,都能体现出这个对象的特点。
    物化视图中的数据来自于基表某个时刻(物化视图的创建时刻,或刷新时刻),因此可以认为是基表都个时刻的快照。
    物化视图和视图类似,反应的是某个查询的结果,但是和视图仅保存SQL定义不同,物化视图本身会存储数据,因此是物化了的视图。

    根据使用功能来分,物化视图可以分为用于数据复制的,或用于预计算查询重新的两个方面。
    物化视图本身有具有很多特性,根据创建方式、刷新方式、是否可更新、是否支持查询重新等可以将物化视图进行进一步的细分。

    用于数据复制的物化视图

    物化视图的一个主要功能就是用于数据的复制,Oracle推出的高级复制功能分为两个部分,多主复制和物化视图复制。
    而物化视图复制就是利用了物化视图的功能。

    物化视图复制包含只读物化视图复制、可更新物化视图复制和可写物化视图复制。
    只读物化视图复制建立的是源数据库的只读环境。可更新物化视图复制建立基于物化视图双向复制环境。
    可写物化视图复制在物化视图建立的时候使用了FOR UPDATE,但是没有像可更新物化视图那样添加到物化视图组中,因此本地物化视图可以修改,但是修改无法发送到源数据库中,因为修改在物化视图刷新后会丢失,这种类型的物化视图复制很少使用。

    只读物化视图环境复制创建的例子:
    http://www.itpub.net/thread-204968-1-1.html
    http://www.itpub.net/viewthread.php?tid=234279


    物化视图复制环境的维护

    物化视图复制环境包括主站点和物化视图站点。根据物化视图是否需要更新,决定是否建立复制组和物化视图组。
    对于只读物化视图而言,不需要建立复制组和物化视图组,因此主站点除了建立物化视图日志外,几乎不需要进行任何的改变。
    而对于可更新的物化视图,则物化视图必须添加到物化视图组中,因此主站点比较建立复制组。如果主站点本身不是多主复制中的成员,那么可以在主站点上建立一个单主复制环境。
    对于包含复制组的主站点而言,复制组中的表的DDL操作会和普通表的DDL有所不同,直接对表进行DDL可能会破坏复制对象。

    物化视图复制环境中一些维护相关问题

    物化视图导出导入可能导致物化视图日志的失效:一个很恐怖的bug,会在意想不到的情况下造成物化视图复制环境被破坏。
    物化视图注册信息的清除:物化视图清除注册信息的问题。
    物化视图复制快速刷新的限制(一):不能在复制得到的物化视图上建立快速刷新的物化视图。
    物化视图复制快速刷新的限制(二):变向的解决方案,将连接或聚集物化视图提前放到基表站点。
    包含复制环境的数据库迁移(一):物化视图站点通过EXP/IMP进行迁移。
    包含复制环境的数据库迁移(二):单主站点通过EXP/IMP进行迁移。
    如何确定导致刷新组刷新失败的物化视图(一):讨论对于本地物化视图,如何定位刷新组中刷新失败的物化视图。
    如何确定导致刷新组刷新失败的物化视图(二):这篇文章描述一种对于各种情况均适用的方法。
    物化视图日志没有清除:介绍了手工清除非正常删除的物化视图的注册信息。
    物化视图刷新过程中出现的约束冲突问题:物化视图刷新过程中约束冲突的解决方法。
    ORA-26500错误:建立、删除函数索引等操作执行后应该重新对表生成复制支持。


    用于预计算的物化视图

    这种类型的物化视图一般用于数据仓库系统。主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。这种物化视图还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。

    这种物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

    创建物化视图时可以指定多种选项:
    创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。
    查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

    可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

    物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。


    基于预计算物化视图特点的简单描述:
    http://yangtingkun.itpub.net/post/468/11356



    物化视图的特点

    物化视图创建:
    建立包含ROLLUP或CUBE的物化视图:何时使用包含ROLLUP和CUBE的物化视图。
    建立物化视图所需权限(一):建立普通物化视图所需权限。
    建立物化视图所需权限(二):建立快速刷新物化视图所需权限。
    建立物化视图所需权限(三):建立ON COMMIT物化视图所需权限。
    建立物化视图所需权限(四):建立查询重写物化视图所需权限。
    在包含LONG类型的表上建立物化视图:物化视图可以复制LONG类型。
    物化视图的创建写法与刷新问题:物化视图的创建写法与刷新问题。
    物化视图删除的顺序:讨论的删除物化视图和删除物化视图日志的顺序。
    创建其他用户下的物化视图报错权限不足:创建一个其他用户的物化视图时报错。




    物化视图快速刷新:
    定位导致物化视图无法快速刷新的原因:当无法创建快速刷新的物化视图时,如何找到物化视图不能快速刷新的原因。
    物化视图的快速刷新(一):基于连接的物化视图的快速刷新限制。
    物化视图的快速刷新(二):基于聚集的物化视图的快速刷新限制。
    物化视图的快速刷新(三):包含UNION ALL的物化视图的快速刷新限制。
    两个导致物化视图无法快速刷新的问题:同义词问题和不同表字段追加问题。
    物化视图的非原子性刷新:介绍物化视图的原子性刷新特点。

    物化视图查询重新:
    建立支持查询重写的同名物化视图失败会删除原有物化视图:这个bug可能导致你原有物化视图被意外删除。
    物化视图查询重写的限制(一):建立查询重写的物化视图的限制。
    物化视图查询重写的限制(二):使用查询重写功能的限制条件。

    物化视图PCT特性:
    物化视图的PCT特性(一):基于分区表的物化视图的PCT特性介绍。
    物化视图的PCT特性(二):基于分区表的物化视图的PCT特性的限制条件。
    10G物化视图PCT快速刷新不再需要物化视图日志(一):Oracle10g增加了物化视图PCT快速刷新的支持,使用PCT快速刷新不再需要物化视图日志。
    10G物化视图PCT快速刷新不再需要物化视图日志(二):继续深入研究一下PCT快速刷新的机制。
    10G物化视图PCT快速刷新不再需要物化视图日志(三):研究PCT快速刷新的机制。



    物化视图深入研究

    对于物化视图的内部机制的研究:

    物化视图日志结构:详细介绍Oracle物化视图日志的各个字段的含义。
    Oracle如何根据物化视图日志快速刷新物化视图:描述Oracle是如何利用物化视图日志来刷新物化视图的。
    物化视图日志如何避免系统时间变化带来的影响:介绍Oracle的物化视图日志机制是如何避免调整系统时间带来的影响的。
    物化视图是否根据字段进行刷新(一):描述现象。
    物化视图是否根据字段进行刷新(二):对Oracle的刷新行为进行推测。
    物化视图是否根据字段进行刷新(三):通过SQL_TRACE的方式确认前面文章的推测。
    小议物化视图与基表数据不一致的消除(一):快速刷新的只读物化视图于基表不一致的解决方法。
    小议物化视图与基表数据不一致的消除(二):修改物化视图日志来同步INSERT和DELETE操作。
    小议物化视图与基表数据不一致的消除(三):如何通过修改物化视图日志来同步UPDATE操作。
    小议物化视图与基表数据不一致的消除(四):如何通过修改物化视图日志来同步包含LOB列的UPDATE操作。
    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    物化视图日志的维护:降低物化视图日志表的高水位线。
    利用触发器对物化视图刷新进行定制:可以通过在物化视图上创建触发器的方式,对刷新操作进行定制。
    物化视图刷新并非完全根据物化视图日志记录:物化视图的刷新不仅仅依赖于物化视图日志。
    数的物化视图。
    包含LOB的物化视图快速刷新:9.2和10上对于包含LOB的物化视图的快速刷新,处理机制不同。
    包含LOB的物化视图快速刷新(二):继续研究10g以后对LOB对象是如何刷新的。
    包含LOB的物化视图快速刷新(三):研究10g以后版本当LOB对象超过32K时,物化视图如何刷新。
    包含LOB的物化视图快速刷新(四):对比9i和11g包含LOB的物化视图的刷新性能。
    物化视图日志表被DROP后建立物化视图报错:如果物化视图日志表是直接被DROP,则建立物化视图时报错。
    获取物化视图字段的修改矢量(一):描述如何获取一个列修改后对应的物化视图修改矢量。
    获取物化视图字段的修改矢量(二):介绍多个字段被修改的情况。
    获取物化视图字段的修改矢量(三):封装了一个函数来完成这个功能。


    物化视图功能灵活运用

    物化视图功能很强大,灵活运用物化视图,可以使得现有的功能锦上添花,也可以实现更多的功能


    物化视图方式进行逻辑数据迁移:数据库逻辑迁移方式除了EXP/IMP之外,还可以使用物化视图进行迁移。
    利用物化视图进行逻辑数据迁移要点:简单介绍一下使用物化视图进行逻辑数据迁移过程中需要注意的一些要点。

    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    利用触发器对物化视图刷新进行定制:可以通过在物化视图上创建触发器的方式,对刷新操作进行定制。
    改造DISTINCT物化视图(一):介绍SELECT语句中的DISTINCT操作。
    改造DISTINCT物化视图(二):介绍COUNT或SUM聚集函数中的DISTINCT操作。
    改造DISTINCT物化视图(三):描述一个包含UNION ALL的例子。
    改造包含MAX或MIN的物化视图:如何改造一个包含MAX或MIN聚集函数的物化视图。




    Oracle的在线重定义功能其实本质就是利用物化视图日志来实现的,重定义过程的数据同步也是利用物化视图的快速刷新。
    不过由于在线重定义也需要物化视图日志的支持,因此在11g以前,是没有办法对已经建立物化视图日志的表进行在线重定义的,不过11g中Oracle增加了这个功能:
    Oracle11新特性——在线操作功能增强(六):在线重定义功能对物化视图日志的支持。


    物化视图有关的问题和BUG

    一些物化视图关于的问题和BUG描述:

    oracle的执行计划居然出错!:9204中查询重写的bug。
    建立支持查询重写的同名物化视图失败会删除原有物化视图:这个bug可能导致你原有物化视图被意外删除。

    物化视图导出导入可能导致物化视图日志的失效:一个很恐怖的bug,会在意想不到的情况下造成物化视图复制环境被破坏。
    两个导致物化视图无法快速刷新的问题:同义词问题和不同表字段追加问题。
    物化视图注册信息的清除:物化视图清除注册信息的问题。
    ORA-600(999)错误(一):物化视图刷新的问题。
    ORA-600(999)错误(二):进一步深入研究这个问题。
    ORA-600(999)错误(三):进一步深入研究数据库中缺少了哪些信息造成了这个问题。
    物化视图刷新过程中出现的约束冲突问题:物化视图刷新过程中约束冲突的解决方法。
    建立物化视图导致数据库实例崩溃:建立物化视图的时候,直接导致了实例的崩溃。
    小议物化视图与基表数据不一致的消除(一):快速刷新的只读物化视图于基表不一致的解决方法。
    小议物化视图与基表数据不一致的消除(二):修改物化视图日志来同步INSERT和DELETE操作。
    小议物化视图与基表数据不一致的消除(三):如何通过修改物化视图日志来同步UPDATE操作。
    小议物化视图与基表数据不一致的消除(四):如何通过修改物化视图日志来同步包含LOB列的UPDATE操作。
    10203设置CURSOR_SHARING为SIMILAR导致物化视图刷新失败:设置CURSOR_SHARING为SIMILAR导致物化视图刷新失败。
    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    ORA-600(ksmovrflow)错误:8i或9i数据库以10g的基表建立物化视图的时候报错。
    如何确定导致刷新组刷新失败的物化视图(一):讨论对于本地物化视图,如何定位刷新组中刷新失败的物化视图。
    如何确定导致刷新组刷新失败的物化视图(二):这篇文章描述一种对于各种情况均适用的方法。
    物化视图基表站点升级导致物化视图刷新错误ORA-4062:物化视图快速刷新报错,出现ORA-4062、ORA-4068错误。
    ORA-600(kkzgavupd_agg.2)错误:在9204上快速刷新一个物化视图出现这个错误。
    物化视图删除的顺序:讨论的删除物化视图和删除物化视图日志的顺序。
    物化视图日志的维护:降低物化视图日志表的高水位线。
    创建其他用户下的物化视图报错权限不足:创建一个其他用户的物化视图时报错。
    ORA-6544(55916)错误:在11g上建立物化视图访问10.1的源表报错。
    ORA-12028错误:在建立物化视图中碰到了这个错误。
    ORA-23515错误:包含物化视图的表空间无法直接删除。
    ORA-26500错误:建立、删除函数索引等操作执行后应该重新对表生成复制支持。


    展开全文
  • Backbine.js实战第章----视图

    千次阅读 2014-11-09 22:22:29
    5.1 视图
  • datetimepicker设置默认视图为年视图

    万次阅读 2016-03-01 17:42:21
    datetimepicker设置默认视图为年视图
  • MySQL 视图

    2014-08-21 13:58:50
    视图是一种虚拟的表 操作简单化 增加数据的安全性 提高表的逻辑独立性 语法: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    VIEW view_name [(column_list)]    AS ...
  • mysql view 视图

    2017-02-06 10:43:20
    一,什么是视图 视图是存放数据的一个接口,也可以说是...其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动。 二,视图有什么用 1,视图可以让查
  • 自绘图元到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 示意图 解决后的目标效果 解决方法 变换之前或之后一定要调用一次prepareGeometryChange(); void RectItemBase::...
  • 1 create view vABC as select * from a,b,c where a.id = b.aid and b.id = c.bid ----------------------------------------------------------------------- 2 CREATEVIEWVABCAS SELECT*FROMA ...
  • mysql 视图 view

    2011-12-26 20:20:23
    一,什么视图 视图是存放数据的一个接口,也可以说是虚拟的表。这些数据可以是从一个或几个基本表(或视图)的数据。也可以是用户自已定义的数据。其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面...
  • Android视图动画集合AndoridViewAnimationsAndroid视图动画是针对视图对象的动画...该集合预置了13大类十三种动画。该集合使用非常简单。开发者只要指定动画类型、播放时间、延迟等几个属性,就可以为指定视图对...
  • UIView是所有视图的父类,UIView的属性和方法,就是所有视图的属性和方法 一.关于坐标系的属性和方法 @property(nonatomic) CGRect frame; @property(nonatomic) CGRect bounds;  @property(nonatomic) CG
  • 为了辅助你的视图考古,你可以用... `不应该被包含在任何会被到 App Store 的代码里`,但它对与视图层次结构实在非常有用。 添加如下打印语句到 tableView:cellForRowAtIndexPath: 中,放在 return 语句之前:
  • 目录,更新ing,学习Java的点滴记录   目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录 SpringMvc知识 第一篇---->...第篇---->拦截器开发 处理模型数据 1 介绍 视
  • 一、⾃自定义视图 二、视图控制器指定自定义View 三、检测屏幕旋转 四、处理内存警告 五、容器视图控制器 一、⾃自定义label-textField视图 优化登录界⾯面 实现一个功能...
  • 使用UITableView实现树视图

    万次阅读 热门讨论 2010-07-21 16:44:00
    众多的网络资料都强调,Cocoa框架不支持树形视图,苹果推荐程序员使用TableViewController+NavigationController的方式展现树形菜单。如果2-3层的树形数据还可以忍受,万一层次稍多一点,必须反复的用导航按钮在视图...
  • 3d max 视图快捷键

    千次阅读 2015-10-27 10:54:13
    常用的是 F:正视图; T:顶视图; L:侧视图; P:**图; C:相机视图。还有其他的,我就不列了。 二 视图的变换 常用的是 Alt+鼠标中键按下:旋转视图(在**图模式下,如果是在二维试图里,就会切换成...
  • 测试开发——flask视图函数与路由 实战重点

    千次阅读 热门讨论 2021-02-23 20:38:19
    flask视图函数与路由一、视图函数与路由 实战重点1.1 一个视图函数可以绑定多个URL地址1.2 视图装饰器应该到最外层1.3所实现的装饰器要返回视图函数的返回值二、动态路由参数 ... 欢迎关注微信公众号:宝藏女孩的...
  • SpringMVC入门之七:使用JSP作为视图

    千次阅读 2017-02-23 12:36:36
    使用JSP作为视图JSP作为JavaWeb应用程序的视图技术已经超过15年了,想在仍然是使用量最大的视图技术。 视图解析器: ...这种视图解析器遵循一种约定...视图位置 在通常的Web应用中,我们把JSP文件到Web应用的WEB-INF目
  • VS Code插件开发教程--树视图+网页视图完整demo+图--3简介、不同 item 显示不同的页面(数据传递: VS code -> html)七、iframe 页面的数据传递指 VS code(iframe -> html -> vscode) 简介 你好! 本人为 ...
  • 理解文档/视图结构

    2014-06-07 10:52:03
    以单文档界面(SDI)应用程序为例,介绍MFC的文档/视图程序结构。 学习要求 理解文档/视图结构,可在AppWizard生成的SDI程序框架的基础上添加必要的代码,以生成自己的应用程序。 授课内容 大部分应用程序均要...
  • VS Code插件开发教程--树视图+网页视图完整demo+图--2简介四、treeView: 在视图中显示想要的 item五、创建 webView 并嵌入百度页面 简介 你好! 本人为 2019.7 毕业的应届毕业生,目前从事前端工程师的职业。对知识...
  • 计算机图形学视图矩阵推导过程

    千次阅读 2018-04-06 00:59:50
    视图矩阵推导过程(Demo基于WebGL 2.0实现) 一、概述 首先,我们需要了解些概念: 摄像机坐标系或者摄像机空间:物体经摄像机观察后,进入摄像机空间。 视变化,是将世界坐标系下的坐标变化到摄像机坐标系,视...
  • Django Xadmin 官方文档 之七 视图

    千次阅读 2019-01-11 14:38:11
    Django Xadmin 官网上的第七部分, 也是官网的最后一部分, 本部分讲解的是 Xadmin 的视图相关类及其方法。 由于博主英语水平有限, 翻译不足之处, 烦请大神指教。 希望能够帮助挣扎在 Django Xadmin 中的小伙伴们...
  • 一.滚动视图的基础概念 滚动视图用于为其它组件添加滚动条,在默认的情况下,当窗体中内容比较多,而一... 滚动视图是FrameLayout的子类,因此,在滚动视图中,可以添加任何想要入其中的组件,但是一个滚动视图中只能...
  • 视图添加控件

    2014-05-29 13:59:06
    介绍 在使用MFC Application Wizard时,如果选择Dialog...在此总结一下向视图添加控件的方法。 子窗体的创建 首先,使用App Wizard生成一个标准的SDI程序,我将它命名为AddCtrl。因为文档与这里要讨论的重点无
  • 数据库-视图(View)详解

    2018-09-18 15:14:00
    视图(View)可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata。 视图简单理解如下: 通过...
  • mysql 视图 view 的用法

    2016-11-24 14:54:51
    换种方法,我把联合查询的数据视图里面,这样查询起来是不是更方便呢,通phpmyadmin看着是不是更清淅呢。 2,保护数据库的重要数据,给不同的人看不同的数据 假如您让别人帮您开发一套系统,但是你又想把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,417
精华内容 18,166
关键字:

六视图怎么放