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 提供了例子。
分享到:
相关推荐
### Apache Click Framework 介绍 #### 一、简介 Apache Click 是一个用于开发 Web 应用程序的 Java 框架,旨在提供一个简洁且高效的 API 来构建动态 Web 页面。Click 的设计目标是减少开发时间并提高代码的可读性...
在Robot Framework中,我们可以创建一个PageObject类,包含页面上的各个元素和相关的关键词。例如,我们可以定义一个`LoginPage`类,包含用户名输入框、密码输入框和登录按钮等元素,并提供`EnterUsername`、`Enter...
#### 四、示例代码 下面提供一个简单的示例,用于演示如何使用 Selenium Library 自动化一个登录流程: ```robot *** Settings *** Library SeleniumLibrary *** Test Cases *** Example Test Case ...
5. **Wait Until Page Contains**:等待页面包含特定文本,例如`Wait Until Page Contains 搜索结果`。 **四、Selenium2Library的优势** 1. **易读性**:Robot Framework的基于关键字的语法使脚本易于阅读和理解,...
5. **变量**:在示例中,${page title} 和 ${variable_name} 代表变量,Robot Framework支持多种类型的变量,包括全局变量、测试套件变量、测试用例变量等。 6. **数据驱动测试**:Robot Framework支持数据驱动测试...
Page Should Contain 欢迎,tester ``` 8. **学习资源**: 要深入了解Robot Framework,可以参考其官方文档,以及各种在线教程和社区讨论。同时,熟悉Python基础和测试驱动开发概念会帮助你更好地运用这个框架。...
Page Should Contain Welcome, tester! ``` 这个例子展示了如何打开浏览器,输入用户名和密码,然后点击登录按钮,并验证是否看到欢迎消息。 在安装和使用32位Robot Framework时,确保你的操作系统和Python环境也...
Should Contain ${PAGE TITLE} Robot Framework - Google Search ``` 这段脚本中,`Open Browser`、`Input Text`、`Click Button`和`Should Contain`都是关键词,它们对应了打开浏览器、输入文本、点击按钮和验证...
Wait Until Page Contains Example Domain Click Element xpath://a[@href='/'] Sleep 2s # 给页面加载时间 Close Browser ``` 6. **最佳实践** - 使用变量存储重复使用的URL和元素选择器,提高代码可读性...
Robot Framework Selenium2Library 1.8.0 是一个专门用于自动化Web应用程序测试的库,它建立在Robot Framework之上,利用Selenium 2 (现称为Selenium WebDriver) 的功能。Robot Framework是一个通用的自动化框架,而...
首先,让我们深入了解WPF的Page类。Page是WPF中的一个用户界面元素,可以视为应用程序中的一个独立视图或“页面”。每个Page可以包含各种控件、布局容器和其他UI元素,用于展示不同的内容或功能。在WPF中,Page通常...
在 Robot Framework 的 Selenium2Library 中,管理和控制浏览器及窗口是自动化测试中的基础操作。 3.3.2 Cookie管理 Cookie 是一种用于存储用户状态的小型文本数据,常用于网站的身份验证和个性化设置。在 Selenium...
- **页面类**:讨论了 Apache Click 中页面类的设计原则及其实现细节。 - **页面执行**:解释了页面的执行过程,包括页面加载、处理用户输入及渲染结果等步骤。 - **请求参数自动绑定**:描述了如何自动将请求参数...
- **ClickButton/ClickElement/ClickElementAtCoordinates/ClickImage/ClickLink** (P16-17): 执行各种点击操作。 - **CloseAllBrowsers/CloseBrowsers/CloseWindow** (P17-18): 关闭浏览器窗口的操作。 - **...
RobotFramework-Zoomba 介绍 Robotframework-Zoomba是使用跨越GUI,REST API,SOAP API,移动和Windows桌面(WinAppDriver)自动化的库的集合。 这些库是现有库 , , 和。...Click Element locator
4. **截屏 (Capture Page Screenshot)**:这个关键字用于捕获当前页面的屏幕快照,可用于测试失败时的调试。 5. **执⾏JS (Execute JavaScript)**:允许执行JavaScript代码,通常用于与页面上的JavaScript元素进行...
Wait Until Page Contains Welcome back, admin Close All Browsers ``` 通过以上介绍,您可以根据自己的需求选择合适的元素定位策略和Selenium2Library关键词来构建自动化测试脚本。此外,还提供了数据库操作的...
这个压缩包可能是某个教程或项目的截图,用于展示如何构建和使用Page Object Model (POM) 模式来设计自动化测试框架。下面我们将深入探讨Python和Selenium框架设计以及POM模式。 Python是一种广泛使用的编程语言,...
2. **元素操作**:使用关键词如`Open Browser`启动浏览器,`Go To`导航到URL,`Click Element`点击页面元素,`Input Text`输入文本等。 3. **等待和断言**:`Wait Until Page Contains`确保页面元素出现,`Should Be...
在自动化测试领域,使用Robot Framework进行AJAX应用的测试需要特别的策略,因为Robot Framework的Selenium库默认假设点击事件会导致页面重载。本文将详细介绍如何利用Robot Framework有效地测试使用AJAX技术的Web...