近期研究了一下webwork和jstl,发现二者组合开发页面流真是很简单的。因为没有找到类似的文章,我就抛砖引玉了。
通常我们只提webwork,实际上使用的时候,我们会用到两个项目webwork和xwork。webwork的功能如下:
1.提供页面展现的标签
2.负责拦截向后台发送的action请求,
3.将前台的form请求转化为本地的上下文,并将本地返回的上下文设置到request/servlet上下文中
4.将action请求派发给xwork定义的action或action方法。
5.返回应答信息
xwork的功能:
1.拦截器功能,webwork传递过来的请求和上下文转化为action的属性或特定的model对象(类似struts的actionform),并将model数据或action属性设置到本地上下文中
2.执行action,完成业务逻辑。
webwok这种划分,使得web开发和后台应用的开发可以完全分开,后台可以进行独立的测试,action完全脱离web环境。
举一个做login的例子:
页面login.html: <form method="post" action="login.action">
<p align="center">用户名:<input type="text" name="model.account" />
<br> <p align="center">密 码 :<input type="password" name="model.password" />
</form>
开发action:
public class LoginAction implements Action, ModelDriven {
private final static String LOGIN_FAIL = "loginfail";
User loginInfo = new User();
public String execute() throws Exception {
if(validate(loginInfo)){
//将当前登录的用户名保存到Session ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
session.put("login_user_account", loginInfo.getAccount());
return SUCCESS;
} else {
loginInfo.setErrorMsg("Username/Password Error!");
return LOGIN_FAIL;
} }
public String reLogin() throws Exception {
return LOGIN_FAIL;
} public Object getModel() {
return loginInfo;
}
}
配置文件xwork.xml <package name="login" extends="webwork-default">
<action name="login" class="com.nwsh.login.action.LoginAction">
<result name="success" type="dispatcher">
<param name="location">/index.htm</param>
</result> <result name="loginfail" type="dispatcher">
<param name="location">/login.htm</param>
</result> <interceptor-ref name="params" />
<interceptor-ref name="model-driven"/>
</action> </package>
对于本页面,简单到登陆页面可以使用html,对于由信息显示的页面可以配合jstl来开发Jsp(2.0).页面也十分简单,举个显示用户信息的例子:
<input type="text" name="userInfo.account" value="${userInfo.account}">
<input type="text" name="userInfo.name" value="${userInfo.name}">
在jsp2.0中,可以直接使用EL语言,这样你就可以使用${userInfo.name},来表示action的model-userInfo包含的信息,注意:这里需要使用一个拦截器,将model属性设置到request/serlvet的上下文中。
|
|
|