`
congpeixue
  • 浏览: 274584 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

Click framework 的 Page类(四)

阅读更多
Template Path

跳转到新页面的另一种可选方法是设置要被呈现的页面模板的路径。 使用这种方式需确保模板
呈现前, 模板所需要的任何东西都必须创建完毕。

我们的改进过的例子如下:

public boolean onViewClick() {
   Long id = viewLink.getValueLong();
   Customer customer = CustomerDAO.findByPK(id); 
    
   addModel("customer", customer);
   
   // Set the Page's path to a new value
   setPath("view-customer.htm");
   
   return false;
}


Node: customer 对象是如何传递到模板中的。 当你迁移到另一个页面时, 这种使用Page
model的方法是不合法的 , 因为在第二个Page对象被创建前, 第一个Page对象已被销毁, 任何model值都已被丢失。

Redirect

Redirects是页面间导航的另一种方式,参考HttpServletResponse.sendRedirect(location)
获得更详细的资料。
redirects 所做的最大的事情是它在用户浏览器里提供了一个准确的URL,该URL用于匹配将要
呈现的页面。
redirects 的缺点是: 当请求一个页面时, 用户浏览器会创建一个往返的通信通道。 这样做
不仅耗费时间, 而且所有page和request信息将被丢失。

一个重定向到 logout.htm 的例子如下:

public boolean onLogoutClick() {
   setRedirect("/logout.htm");
   return false;
} 


如果重定向位置以“/”字符串开头, 将会在重定向位置的前面加上程序上下文的路径。
例如: 当一个部署到上下文为mycorp的程序调用setRedirect("/customer/details.htm") 时,
将会把请求重定向到“"/mycorp/customer/details.htm”。


你也可以通过目标Page的class来获取重定向的路径。 例如:
public boolean onLogoutClick() {
   String path = getContext().getPagePath(Logout.class);
   setRedirect(path);
   return false;
} 


当使用这种重定向方法时, 需确保目标Page class对应唯一的一个路径。

使用重定向到一个简单方式是在redirect 方法中直接指定要重定向的Page class。 例如:

public boolean onLogoutClick() {
   setRedirect(Logout.class);
   return false;
} 



Redirect Parameter Passing


你可以使用URL 请求参数在重定向的页面间传递信息。 ClickServlet 会使用 HttpServletResponse.encodeRedirectURL
自动地编码URL。

在这个例子中, 用户点击一个OK按钮来确认一次支付。 onOkClick()按钮处理器获得支付
交易id, 然后使用此经过URL编码的id重定向到 trans-complete.htm。
public class Payment extends Page {
   ..
   
   public boolean onOkClick() {
      if (form.isValid()) {
         // Process payment
         ..
         
         // Get transaction id
         Long transId = OrderDAO.purchase(order);
   
         setRedirect("trans-complete.htm?transId=" + transId);
      
         return false; 
      } 
  
      return true;
   }
} 


对应trans-complete.htm 的Page类可以通过请求参数transId来获得此次交易id。


public class TransComplete extends Page {
   
   /**
    * @see Page#onInit()
    */
   public void onInit() {
      String transId = getContext().getRequest().getParameter("transId");
   
      if (transId != null) {
      
         // Get order details
         Order order = OrderDAO.findOrderByPK(new Long(transId));
         if (order != null) {
            addModel("order", order);
         }
      }
   }
}


Post Redirect

上面的参数传递例子也是一个Post 重定向例子。Post重定向对防止用户通过点击刷新按钮来
提交表单是非常重要的。


Page Templating

Click支持Page Templating, 它可以帮助你在你个web程序中建议一个标准的试图并能
大大减少你需要维护的html代码量。

为了实现模板功能, 定义了一个基于Page的框架模板。 该基于Page的模板类覆写了Page的 getTemplate()
方法, 放回框架模板的路径。 例如:
public class BorderedPage extends Page {

    /**
     * @see Page#getTemplate()
     */
    public String getTemplate() {
        return "/border.htm";  
    }
} 


BorderedPage 模板border.htm:

<html>
   <head>
     <title>$title</title>
     <link rel="stylesheet" type="text/css" href="style.css" title="Style"/>
   </head>
   <body>
 
     <h2 class="title">$title</h2>
 
     #parse($path)
 
   </body>
 </html> 

其它页面使用Velocity的 #parse指令将它们的上下文添加到此模板中,$path的值会自动地被ClickServlet
添加到VelocityContext 中。

如下提供了一个例子:

引用
<page path="home.htm" classname="Home"/>



public class Home extends BorderedPage {
   
     public String title = "Home";

}


Home页面的内容home.htm
<b>Welcome</b> to Home page your starting point for the application.


当Homepage 接到一个请求时(home.htm), Velocity会将 border.htm 和home.htm融合在一起并返回。

 <html>
   <head>
     <title>Home</title>
     <link rel="stylesheet" type="text/css" href="style.css" title="Style"/>
   </head>
   <body>
 
     <h2 class="title">Home</h2>
 
     <b>Welcome</b> to Home page your application starting point.
 
   </body>
 </html> 



Note :Home page定义一个被border.htm模板引用的title模型的方式。

使用相同的方式也支持Jsp模板, 请参考Click Examples 提供了例子。

分享到:
评论

相关推荐

    click-book apache click framework介绍

    ### Apache Click Framework 介绍 #### 一、简介 Apache Click 是一个用于开发 Web 应用程序的 Java 框架,旨在提供一个简洁且高效的 API 来构建动态 Web 页面。Click 的设计目标是减少开发时间并提高代码的可读性...

    RobotFramework中实现PageObject模式的轻量级关键字库_Python_RobotFramework.zip

    在Robot Framework中,我们可以创建一个PageObject类,包含页面上的各个元素和相关的关键词。例如,我们可以定义一个`LoginPage`类,包含用户名输入框、密码输入框和登录按钮等元素,并提供`EnterUsername`、`Enter...

    robot framework +selenium

    #### 四、示例代码 下面提供一个简单的示例,用于演示如何使用 Selenium Library 自动化一个登录流程: ```robot *** Settings *** Library SeleniumLibrary *** Test Cases *** Example Test Case ...

    RobotFramework-Selenium2Library

    5. **Wait Until Page Contains**:等待页面包含特定文本,例如`Wait Until Page Contains 搜索结果`。 **四、Selenium2Library的优势** 1. **易读性**:Robot Framework的基于关键字的语法使脚本易于阅读和理解,...

    robotframework自动化测试demo实例

    5. **变量**:在示例中,${page title} 和 ${variable_name} 代表变量,Robot Framework支持多种类型的变量,包括全局变量、测试套件变量、测试用例变量等。 6. **数据驱动测试**:Robot Framework支持数据驱动测试...

    robotframework安装包

    Page Should Contain 欢迎,tester ``` 8. **学习资源**: 要深入了解Robot Framework,可以参考其官方文档,以及各种在线教程和社区讨论。同时,熟悉Python基础和测试驱动开发概念会帮助你更好地运用这个框架。...

    robot framework 32bit【32位】

    Page Should Contain Welcome, tester! ``` 这个例子展示了如何打开浏览器,输入用户名和密码,然后点击登录按钮,并验证是否看到欢迎消息。 在安装和使用32位Robot Framework时,确保你的操作系统和Python环境也...

    RobotFramework Tool

    Should Contain ${PAGE TITLE} Robot Framework - Google Search ``` 这段脚本中,`Open Browser`、`Input Text`、`Click Button`和`Should Contain`都是关键词,它们对应了打开浏览器、输入文本、点击按钮和验证...

    Python库 | robotframework_browser-2.4.1-py3-none-any.whl

    Wait Until Page Contains Example Domain Click Element xpath://a[@href='/'] Sleep 2s # 给页面加载时间 Close Browser ``` 6. **最佳实践** - 使用变量存储重复使用的URL和元素选择器,提高代码可读性...

    robotframework-selenium2library-1.8.0

    Robot Framework Selenium2Library 1.8.0 是一个专门用于自动化Web应用程序测试的库,它建立在Robot Framework之上,利用Selenium 2 (现称为Selenium WebDriver) 的功能。Robot Framework是一个通用的自动化框架,而...

    WPF多页面Page导航实例

    首先,让我们深入了解WPF的Page类。Page是WPF中的一个用户界面元素,可以视为应用程序中的一个独立视图或“页面”。每个Page可以包含各种控件、布局容器和其他UI元素,用于展示不同的内容或功能。在WPF中,Page通常...

    Robot Framework-Selenium2Library 常用关键字

    在 Robot Framework 的 Selenium2Library 中,管理和控制浏览器及窗口是自动化测试中的基础操作。 3.3.2 Cookie管理 Cookie 是一种用于存储用户状态的小型文本数据,常用于网站的身份验证和个性化设置。在 Selenium...

    Apache Click User Guide

    - **页面类**:讨论了 Apache Click 中页面类的设计原则及其实现细节。 - **页面执行**:解释了页面的执行过程,包括页面加载、处理用户输入及渲染结果等步骤。 - **请求参数自动绑定**:描述了如何自动将请求参数...

    RobotFramework-Selenium2Library中文版_V1.1.pdf

    - **ClickButton/ClickElement/ClickElementAtCoordinates/ClickImage/ClickLink** (P16-17): 执行各种点击操作。 - **CloseAllBrowsers/CloseBrowsers/CloseWindow** (P17-18): 关闭浏览器窗口的操作。 - **...

    robotframework-zoomba:扩展的Robot Framework库使测试GUI,RESTSOAP API,Mobile和Windows Desktop更加容易

    RobotFramework-Zoomba 介绍 Robotframework-Zoomba是使用跨越GUI,REST API,SOAP API,移动和Windows桌面(WinAppDriver)自动化的库的集合。 这些库是现有库 , , 和。...Click Element locator

    RobotFramework常见语法.pdf

    4. **截屏 (Capture Page Screenshot)**:这个关键字用于捕获当前页面的屏幕快照,可用于测试失败时的调试。 5. **执⾏JS (Execute JavaScript)**:允许执行JavaScript代码,通常用于与页面上的JavaScript元素进行...

    基于Robot-Framework+Selenium2用户操作手册

    Wait Until Page Contains Welcome back, admin Close All Browsers ``` 通过以上介绍,您可以根据自己的需求选择合适的元素定位策略和Selenium2Library关键词来构建自动化测试脚本。此外,还提供了数据库操作的...

    auto_framework_demo_screenshot.zip

    这个压缩包可能是某个教程或项目的截图,用于展示如何构建和使用Page Object Model (POM) 模式来设计自动化测试框架。下面我们将深入探讨Python和Selenium框架设计以及POM模式。 Python是一种广泛使用的编程语言,...

    Robot+Framework+WD+培训-吴穹++ChinaTest2012.pdf

    2. **元素操作**:使用关键词如`Open Browser`启动浏览器,`Go To`导航到URL,`Click Element`点击页面元素,`Input Text`输入文本等。 3. **等待和断言**:`Wait Until Page Contains`确保页面元素出现,`Should Be...

    使用RobotFramework测试AJAX

    在自动化测试领域,使用Robot Framework进行AJAX应用的测试需要特别的策略,因为Robot Framework的Selenium库默认假设点击事件会导致页面重载。本文将详细介绍如何利用Robot Framework有效地测试使用AJAX技术的Web...

Global site tag (gtag.js) - Google Analytics