Struts2与freemarker自定义标签

来源:互联网 发布:kwic软件体系结构 编辑:程序博客网 时间:2024/05/17 06:41

包目录视图


领域模型层User.java

package com.xuzengqiang.project.domain;public class User{private String username;private String password;public String getUsername(){return username;}public void setUsername(String username){this.username = username;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}}

Index.java用于首页跳转,访问WEB-INF下面的index.jsp页面

package com.xuzengqiang.project.struts2.action;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class IndexAction extends ActionSupport{public String execute() throws Exception{return "success";}}
UserAction.java用于登录跳转

package com.xuzengqiang.project.struts2.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport{private static final long serialVersionUID = 3252129927051594877L;private String username;private String password;public String getUsername(){return username;}public void setUsername(String username){this.username = username;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public String login() throws Exception{String username=getUsername();String password=getPassword();if("xuzengqiang".equals(username) && "123".equals(password)){HttpServletRequest request=ServletActionContext.getRequest();HttpSession session=request.getSession();session.setAttribute("username", username);return "user_login_success";}return "user_login_failure";}}
CssLink.java,需继承UIBean。

package com.xuzengqiang.project.view.component;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.UIBean;import com.opensymphony.xwork2.util.ValueStack;@SuppressWarnings("all")public class CssLink extends UIBean{private String sourcePath="";private String templateName="csslink.ftl";public String getSourcePath(){return sourcePath;}public void setSourcePath(String sourcePath){this.sourcePath=sourcePath;}public String getTemplateName(){return templateName;}public void setTemplateName(String templateName){this.templateName=templateName;}public CssLink(ValueStack stack, HttpServletRequest request, HttpServletResponse response){super(stack, request, response);}@Overrideprotected Object findValue(String expr, Class toType){if(null !=expr){return super.findValue(expr, toType);}return null;}@Overrideprotected void evaluateExtraParams(){super.evaluateExtraParams(); //添加参数,在freemarker的模板中就可以使用${parameters.sourcePath}获取路径了if(sourcePath!=null){addParameter("sourcePath", findValue(getSourcePath() , String.class));}}//返回模板名称@Overrideprotected String getDefaultTemplate(){return templateName;}}

CssLinkTag.java,需继承ComponentTagSupport类

package com.xuzengqiang.project.view.tag;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.components.Component;import org.apache.struts2.views.jsp.ComponentTagSupport;import com.opensymphony.xwork2.util.ValueStack;import com.xuzengqiang.project.view.component.CssLink;//fm:cssLink 用作css样式的链接public class CssLinkTag extends ComponentTagSupport{private static final long serialVersionUID = 5431625114311564858L;private String sourcePath = "";public String getSourcePath(){return sourcePath;}public void setSourcePath(String sourcePath){this.sourcePath = sourcePath;}@Overridepublic Component getBean(ValueStack valStack, HttpServletRequest request, HttpServletResponse response){return new CssLink(valStack, request, response);}@Override/* * 参数的初始化 */protected void populateParams(){super.populateParams();CssLink cssLink = (CssLink) component;cssLink.setSourcePath(getSourcePath());}}
csslink.ftl

<link rel="stylesheet" type="text/css" href="${parameters.sourcePath}"/>

framework-tag.tld,拷贝struts2-core-....jar包目录下的META-INF下的struts-tags然后重命名即可。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"version="2.0"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"><display-name>Framework Tags</display-name><tlib-version>2.3</tlib-version><short-name>fm</short-name><uri>/framework-tags</uri><tag><description><![CDATA[struts2结合freemarker自定义标签]]></description><name>cssLink</name><tag-class>com.xuzengqiang.project.view.tag.CssLinkTag</tag-class><body-content>empty</body-content><attribute><name>sourcePath</name><required>false</required><rtexprvalue>false</rtexprvalue></attribute><dynamic-attributes>false</dynamic-attributes></tag></taglib>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>    <package name="index" extends="struts-default">       <action name="index" class="com.xuzengqiang.project.struts2.action.IndexAction">           <result name="success">/WEB-INF/index.jsp</result>       </action>      </package><package name="user" extends="struts-default"> <action name="user" class="com.xuzengqiang.project.struts2.action.UserAction"> <result name="user_login_success">/WEB-INF/success.jsp</result> <result name="user_login_failure">/WEB-INF/index.jsp</result> </action></package></struts>

index.jsp,使用的时候需要加上<@taglib prefix="fm" uri="/framework-tags" %>,调用的时候使用<fm:cssLink 属性1>即可。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="fm" uri="/framework-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><fm:cssLink sourcePath="/ProjectTest/css/index.css" /><title>测试用例</title></head><body><div class="content"><div class="login"><form action="${pageContext.request.contextPath}/user!login" method="post">账号:<input type="text" name="username"/><br/>姓名:<input type="text" name="password"/><br/><input type="submit" value="登录"/></form></div></div></body></html>

web.xml,如果要将配置文件struts.xml放入到WEB-INF下面的某个目录下面,可以在过滤器StrutsPreparedAndExecuteFilter中配置config参数。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>ProjectTest</display-name>  <filter>  <filter-name>strutsPrepareAndExecuteFilter</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  <init-param>  <param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,      ../configuration/struts.xml</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>strutsPrepareAndExecuteFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>







0 0
原创粉丝点击