1. 程式人生 > >Struts2與freemarker自定義標籤

Struts2與freemarker自定義標籤

包目錄檢視


領域模型層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);
	}
	
	@Override
	protected Object findValue(String expr, Class toType)
	{
		if(null !=expr)
		{
			return super.findValue(expr, toType);
		}
		return null;
	}
	
	@Override
	protected void evaluateExtraParams()
	{
		super.evaluateExtraParams(); //新增引數,在freemarker的模板中就可以使用${parameters.sourcePath}獲取路徑了
		if(sourcePath!=null)
		{
			addParameter("sourcePath", findValue(getSourcePath() , String.class));
		}
	}
	
	//返回模板名稱
	@Override
	protected 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;
	}

	@Override
	public 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>






相關推薦

Struts2freemarker定義標籤

包目錄檢視 領域模型層User.java package com.xuzengqiang.project.domain; public class User { private String

BodyTagSupportTagSupport定義標籤

BodyTagSupport與TagSupport的區別在於,BodyTagSupport標籤處理類與標籤體進行互動,TagSupport標籤處理類不與標籤體進行互動,因為BodyTagSupport是TagSupport的子類,所以用TagSupport實現的都可以用BodyTagSupport實

freemarker定義標籤報錯(四)

 freemarker自定義標籤 1、錯誤描述 六月 05, 2014 11:31:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 嚴重: Template processing error: "Err

freemarker定義標籤報錯(五)

freemarker自定義標籤 1、錯誤描述 六月 05, 2014 11:40:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 嚴重: Template processing error: "Expr

spring中freemarker定義標籤詳解

最近因工作需要,從網上搜了一個jeecms網站,準備進行借鑑使用,發現裡面對模板用的不錯,前面雖說也對freemarker有用,但是還沒有這麼深入,所以就查了一些資料,下面進行總結下。 一、jar包準備 首先是Spring、SpringMVC的依賴jar包…… 然後是Fr

Java Web學習筆記(一)FreeMarker定義標籤實現生成前端指令碼驗證

最近在學習Java Web因為.net已經寫的想吐了。通過網易雲課堂瞭解了當前常用的SSM框架的使用方法,前期一切都很順利,包括資料庫的訪問、事務提交、物件注入、面向切片等等,但是當我對頁面檢視進行實現時發現相對於.net有一點不方便。Java Web的檢視層的實現方式非常

Freemarker定義標籤的簡單分析

一、 用macro實現自定義指令,例如: 自定義指令可以使用macro指令來定義。 <#macro greet person> <font size="+2">Hello ${person}!</font>

Freemarker定義標籤+spring國際化所碰到的坑

最近在弄springmvc國際化,碰到一個問題,昨天下午兩三個小時加上今天上午,最後終於在大佬同事的提示下知道了原因所在。 首先注意spring.ftl的這句話 這是freemarker的巨集變數,由此可以看出springMacroRequestContext是一個物件

freemarker定義標籤報錯(六)

freemarker自定義標籤 1、錯誤描述 freemarker.core.ParseException: Encountered "\"\u4f60\u597d\uff01\"" at line 18, column 25 in myself.ftl. Was ex

Spring遇見問題(三)-----FreeMarker定義標籤

web.xml檔案 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http:

freemarker定義標籤(二)

freemarker自定義標籤 1、自定義標籤       通過自定義標籤,寫一個重複指定字串 2、實現原始碼 <html> <head> <meta

struts2專案中用freemarker定義模板,s:component標籤來引用

1 在WEB-INF下建立template/simple資料夾,在裡面新建模板檔案prop1.ftl模板檔案內容為<div> <span>${parameters.p_title?html}:</span> <#if paramet

djiango定義標籤過濾器

from django import template #關鍵程式碼 register = template.Library() #關鍵程式碼 from django.db.models import Count from django.utils.safestring import mar

freemarker 定義freeMarker標籤

Java程式碼   import java.io.IOException;   import java.io.Writer;   import java.util.Iterator;   import java.util.List;   import java.util.Map;   import 

Struts2中,定義radioselect的值

在前端頁面引入Struts2標籤後,是否可以自定義標籤 radio ,select 中包含的值(就是把值寫死),參考如下 <s:radiolist="#{1:'日',2:'月',5:'季',

Java EE入門教程系列第二章JSP(六)——JSP標準標籤定義標籤的配置使用

2.6 JSP的標籤 2.6.1 標籤簡介 標籤就是把一段具體業務的Java程式碼封裝起來,然後以標記語言的形式在頁面檔案中對它進行呼叫,增強頁面檔案和Java程式的獨立性。 目前標籤庫有兩種形式:標準標籤庫和自定義標籤。 JSP標準標籤(JSTL)是一個可以實現We

spring原始碼(9)定義標籤定義標籤的解析

一、自定義標籤 建立model package com.demo3; /** * * @author dqf * @since 5.0 */ public class User {

Taglib標籤之六Taglib中常用的屬性值tld常用標籤簡介web.xml設定定義標籤的uri

tld標籤的描述檔案   標籤的描述檔案是一個描述整個標籤庫標記資訊和標籤庫中每個標籤處理器以及其屬性的XML文件。可以包含如下的一些元素。   1. tlibversion:標籤庫版本號,是一個點式十進位制數(例如1.0),最多為4組小數點分隔的數字組成。   2. jspversion:標籤庫所需

定義標籤的實現基礎知識

         自定義標籤  1.自定義標籤怎麼實現 1)建立一個類它的介面為simpleTag     public class MyTag implements SimpleTag {        //未實現的方法 其中setJspContext

Javaweb學習筆記6—EL表示式JSTL及定義標籤

 前幾天部落格被黑了,導致部落格登陸不上,把前幾天應該發的東西的東西重新發一遍 今天來講javaweb的第六階段學習。 EL表示式與JSTL及自定義標籤是對上篇文章介紹的JSP的擴充套件,不能說是