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>
<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"/>
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不知会不会解决:)