Java Web快速开发框架 ---- JSPX

     现在的Java Web应用程序框架都需要进行大量的配置、投入大量的时间精力后才能投入生产,而且给人比较繁琐的感觉,如Struts、Tapestry等。今天在Sourceforge上寻到一开源框架--JSPX,在它的官方网站上将JSPX描述为:“

JSPX is a pure java opensource free web RAD framework that easier and faster than most of the existing frameworks (JSP-Servlets-Struts-JSF-Clay), with a lot of features that improve productivity. You just need to know HTML and JAVA to master JSPX. ”

  从上面最后一句可以看出,使用JSPX只需要知道HTML和Java POJOs即可。

  我测试了下,写个最简单的登录页面,使用JSPX只需要5分钟时间,呵呵,很短吧,让我们来看下是如何的简洁与快速。

  1.在Eclipse中创建Dynamic Web Project.

  

  2.修改web.xml,加入以下Servlet.

<servlet>
		<display-name>JspxHandler</display-name>
		<servlet-name>JspxHandler</servlet-name>
		<servlet-class>eg.java.net.web.jspx.engine.RequestHandler</servlet-class>
	</servlet>
	<servlet>
		<display-name>ResourceHandler</display-name>
		<servlet-name>ResourceHandler</servlet-name>
		<servlet-class>eg.java.net.web.jspx.engine.ResourceHandler</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>JspxHandler</servlet-name>
		<url-pattern>*.jspx</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>ResourceHandler</servlet-name>
		<url-pattern>/jspxEmbededResources/*</url-pattern>
	</servlet-mapping>
</servlet>

  3. 创建HTML页面

  以.jspx方式创建Login.jspx页面,代码如下:

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://jspx-bay.sourceforge.net/jspx.xsd"
	controller="com.demo.reg.web.controller.LoginPage">
<html>
<head>
<title>Login System</title>
</head>
<body>
<center>
<h1>Welcome to the System</h1>
<h3>Please login in</h3>
<form method="post" enctype="multipart/form-data">
<table>
	<tr>
		<td>Username:</td>
		<td>
			<input type="text" id="username" value="" style="font-size: 11px" mce_style="font-size: 11px" /> 
			<validator type="required" control_to_validate="username" group="loginGroup"
			message="Username cannot be EMPTY" indicator="*"
			indicator_style="color:red; font-style:italic;" />
		</td>
	</tr>
	<tr>
		<td>Password:</td>
		<td>
			<input type="password" id="password" value="" style="font-size: 11px" mce_style="font-size: 11px" />
			<validator type="required" control_to_validate="password" group="loginGroup"
			message="Password cannot be EMPTY" indicator="*"
			indicator_style="color:red; font-style:italic;" />
		</td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<input type="button" onserverclick="loginClick" value="LOGIN" id="loginButton" group="loginGroup" />
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<label id="loginResult" />
		</td>
	</tr>
</table>
</form>
</center>
</body>
</html>
</page>

  4. 创建Java Class

  创建的Java Class必须与页面上page标签中controller属性指定的值一致,故此处需要在com.demo.reg.web.controller包中创建名为LoginPage的Class.

package com.demo.reg.web.controller;

import eg.java.net.web.jspx.ui.controls.WebControl;
import eg.java.net.web.jspx.ui.controls.html.elements.Label;
import eg.java.net.web.jspx.ui.controls.html.elements.inputs.Button;
import eg.java.net.web.jspx.ui.controls.html.elements.inputs.TextBox;
import eg.java.net.web.jspx.ui.pages.Page;

/***
 * The logic of Login.jspx
 * @author YU Zhipeng
 * @version 1.0
 *
 */
public class LoginPage extends Page {
	private TextBox username = new TextBox();
	private TextBox password = new TextBox();
	private Button loginButton = new Button();
	private Label loginResult = new Label();

	public TextBox getUsername() {
		return username;
	}
	public void setUsername(TextBox username) {
		this.username = username;
	}
	public TextBox getPassword() {
		return password;
	}
	public Label getLoginResult() {
		return loginResult;
	}
	public void setLoginResult(Label loginResult) {
		this.loginResult = loginResult;
	}
	public void setPassword(TextBox password) {
		this.password = password;
	}
	public Button getLoginButton() {
		return loginButton;
	}
	public void setLoginButton(Button loginButton) {
		this.loginButton = loginButton;
	}
	
	public void loginClick(WebControl sender, String args){
		if (username.getValue().equals(password.getValue())){
			request.getSession().setAttribute("user", username.getValue());
			this.dispatch("index.jspx");
		}
	}
	
}

OK,至此开发已经全部完成,你可以启动服务器来运行了。下图为运行的实际效果:


  大家看到了,页面上还加入了Validation验证,想像一样如果要在Struts中做到这样效果,没有半小时是不可能的。在整修JSPX中没有什么的配置文件,JSPX也不需要任何配置文件,所以可以将JSPX描述为"Zero Configurations Framework".

 

  JSPX中的HTML与普通的HTML到底有什么不同呢?其它大家可以看到,除了根元素<page>外,其它还都是标准的HTML标签,这可以说是JSPX的特征之一,将一个已经设计好的HTML页面包装成JSPX页面仅仅可以只使用<page>标签。但同时,如果遇到比较复杂的逻辑,像显示查询数据等,可以使用JSPX自带的标签,如DataTable, ListTable等来操作,会非常简单。

 

  控制器Controller其实是一个简单的POJO类,在这个类中你可以定义其它的Web组件,然后在JSPX页面上添加相应的标签,令其id与Controller中的变量名一致即可。

   

        上次通过一个简单的例子介绍了JSPX Web框架的基本使用,这次让我们来看看JSPX Web框架提供的特殊标签--DataTable.

  JSPX提供DataTable是一个集查询、分页、显示等为一身的标签,使用起来非常简单,但也有它不足的地方,好了,废话少话,先来看代码:

<datatable id="datatable" datasource="java:comp/env/jdbc/DemoDS" table ="Users" 
			
			sql="select * from Users where userid>MYID order by userid asc" 
			
			showrowindex="true"
			
			style="border-style: solid;	border-width: 1px;	border-color: black;"
			headerstyle="color: #FFFFFF;	font-family: tahoma,arial;	font-size: 12px;	font-weight: bold;	background-color: gray;"
			rowstyle="background-color:#C9F1C9" selectedrowstyle="background-color:#59eeee"   >
			
				<dataparam name="MYID" control="userId" expression="userid>MYID"></dataparam>
				<datapk name="userid" sequence="myseq" />
				<datacolumn text="User Id" fieldname="USERID" type="number" />
				<datacolumn	text="Username" fieldname="USERNAME" type="string"  required="true"/>
				<datacolumn	text="Email" fieldname="EMAIL" type="string"  required="true"/>
				<datacolumnCommand text="select"   type="select" action="rowSelected"/>
				<datacolumnCommand text="check All "   type="check" />
				<datacolumnCommand text="modify"   type="edit"/>
				<datacolumnCommand text="remove" confirm="Are you sure you want to remove this user?" type="delete"/>			
				<footer newCommandText="Add New Item" message="total search results {0}, page{1}/{2}" />
			</datatable>

  其中datasource表示数据源,需要在相应的应用服务器配置,以下是在Tomcat 6.0中配置Datasource的代码:
<Resource driverClassName="com.mysql.jdbc.Driver" maxActive="4" maxIdle="2" maxWait="5000" name="jdbc/DemoDS" password="root" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/demo?autoReconnect=true" username="root"/>
	

table属性:是你需要查询的数据库表名;

 sql属性:查询的SQL语句;

showrowindex属性:表示需要显示序号;

 

<dataparam>元素用来定义传入sql语句的参数,name属性用于指定传入SQL的变量名称,此处为MYID,而control指定变量从哪个属性取值,此例中为userId,表明是从userId中取得值,并赋值给MYID,expression为定义的表达式.

 

<datapk>元素定义主键,name为要作为主键的属性,sequence为Oralce中table所对应的sequence的名称。

 

<datacolumn>元素用于定义显示的数据列,其中text属性表示显示的列名称,fieldname表示从哪个属性中取值,type表示该列的数据类型,required表示该列是必须的。

 

<datacolumnCommand>元素表示定义列操作,JSPX默认提供了几个列操作,如select表示选择该条记录,并会返回该条记录的PK;check类型会显示为checkbox,并可对所有记录进行选择;edit类型表示对记录进行修改,JSPX对自动提供对记录的更新操作;remove类型表示删除记录;

 

<footer>用于指定页脚内容。

 

  我在测试时使用的是MySQL数据库,在运行此页面时有Exception抛出,通过查看源代码以及与JSPX的作者联系,确认目前JSPX只支持Oracle数据库,因此,如果你使用的是Oracle的话,JSPX将不会有任何的错误,除此之外,你需要修改JSPX的DAO类的源代码并编译打包后使用。

  关于这个Bug,JSPX的作者Amr告知将在JSPX的下一版本1.0.3中修复,大家期待吧,呵呵,不过此外还有一个关于生成PK的Bug不知会不会解决:)


你可能感兴趣的:(java,框架,Web,button,textbox,web框架)