`

发布一个Spring小插件postmark

阅读更多
(一) postmark用来干什么?
很多网站注册时都要求填写出生地是什么地方对吧。
往往UI是这样的:一个下拉框选择省级行政区单位,你选择好了以后,用第二下拉框选择市(县)。
postmark就是来帮助大家完成这个工作的。

(二) 如何得到postmark?
iteye用户可以通过本文附件下载。

(三) postmark依赖什么?
1) 依赖spring,建议使用spring3.1.2.RELEASE。
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>3.1.2.RELEASE</version>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-beans</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-tx</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-orm</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jms</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-oxm</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc-portlet</artifactId>
	<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>aopalliance</groupId>
	<artifactId>aopalliance</artifactId>
	<version>1.0</version>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
	<version>1.6.11</version>
</dependency>

2) 依赖hsqldb,建议使用hsqldb-2.2.8
<dependency>
	<groupId>org.hsqldb</groupId>
	<artifactId>hsqldb</artifactId>
	<version>2.2.8</version>
</dependency>


(四) 核心API
package com.ztgame.postmark.api;

import java.util.List;
import com.ztgame.postmark.entity.AdministrativeRegion;

/**
 * 核心API
 * 
 * @author 应卓
 *
 */
public interface PostmarkService {

	/**
	 * 获取所有省级行政区列表
	 * 
	 * @return 所有省级行政区列表
	 */
	public List<AdministrativeRegion> getAllLevelOneAdministrativeRegions();
	
	/**
	 * 根据省级行政区ID获得所辖市县(区)的信息
	 * 
	 * @param id 省级行政区id
	 * @return 所辖市县的信息
	 */
	public List<AdministrativeRegion> getLevelTwoAdministrativeRegionsByParentId(Integer id);
	
	/**
	 * 根据省级行政区名称或简称获取所辖市县(区)的信息
	 * 
	 * @param nameOrShortName 省级行政区名称或简称
	 * @return 获取所辖市县(区)的信息
	 */
	public List<AdministrativeRegion> getLevelTwoAdministrativeRegionsByParentName(String nameOrShortName);

}

核心API仅仅包含一个接口的三个方法,很简单。

(五) 配置postmark
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:c="http://www.springframework.org/schema/c"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

	<bean id="postmarkService" class="com.ztgame.postmark.impl.PostmarkServiceImpl">
		<property name="jdbcTemplate">
			<bean class="org.springframework.jdbc.core.JdbcTemplate">
				<property name="dataSource">
					<jdbc:embedded-database>
						<jdbc:script encoding="UTF-8" location="classpath:com/ztgame/postmark/api/postmark.sql" />
					</jdbc:embedded-database>
				</property>
			</bean>
		</property>
	</bean>
</beans>

这样postmark的核心API就可以使用了。

(六) 在Web项目中运用postmark
1) postmark通过一个javax.servlet.Filter的实现类来响应ajax请求
<bean id="postmarkSerivceFilter" class="com.ztgame.postmark.web.PostmarkServiceFilter">
	<property name="encoding" value="utf-8" />
	<property name="postmarkService" ref="postmarkService" />
</bean>

2) 在web项目部署描述符应当配置相应的url-pattern信息,如:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<filter>
		<filter-name>postmarkSerivceFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>postmarkSerivceFilter</filter-name>
		<url-pattern>/postmark.cgi</url-pattern>
	</filter-mapping>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring-beans.xml
		</param-value>
	</context-param>
</web-app>

3) filter接受的请求参数
功能methodshortNamecssClassidname
得到所有的省级行政区option标签getAllLevelOnetrue或者false 默认为false任意不需要不需要
通过省级行政区ID得到市(县)option标签getLevelTwoByParentIdtrue或者false 默认为false任意省级行政区ID不需要
通过省级行政区名称或简称得到市(县)option标签getLevelTwoByParentNametrue或者false 默认为false任意不需要名称或简称

4) jsp example
<%@ page language="java" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<%@ page isELIgnored="false" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<html>
	<head>
		<base href="<%=basePath%>" />
		<link rel=stylesheet type="text/css" href="css/style.css"/>
		<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
		
		<script type="text/javascript">
			$(document).ready(function() {
				$.ajax({
					url: "postmark.cgi",
					type: "GET",
					data: {
						method: "getAllLevelOne",
						shortName: "false"
					},
					dataType: "html",
					error: function(){
						alert("error");
					},
					success: function(html) {
						$("#level1").html("<option value='-1' class=''>保密</option><option disabled='disabled'>----------------</option>" + html);
					}
				});
				
				$("#level2").hide();
				
				$("#level1").change(function() {
					var parentId = $(this).val();
					
					if (parentId == -1) {
						$("#level2").hide();
					} else {
						$("#level2").show();
						$.ajax({
							url: "postmark.cgi",
							type: "GET",
							data: {
								method: "getLevelTwoByParentId",
								id: parentId,
								shortName: "false"
							},
							dataType: "html",
							error: function() {
								alert("error");
							},
							success: function(html) {
								$("#level2").html(html);
							}
						});
					}
				});
			});
		</script>

		<title>index.jsp</title>
	</head>

	<body>
		<label>你来自:</label><select name="level1" id="level1"></select><select name="level2" id="level2" ></select>
	</body>
</html>

5) 效果图


分享到:
评论

相关推荐

    postmark下载+教程

    在提供的压缩包中,你可能会发现一个教程文件,它包含了更多关于如何使用Postmark的详细信息,包括高级功能和最佳实践。建议仔细阅读这个教程,以便更好地理解和利用Postmark。 总结:Postmark是一款强大的邮件服务...

    Laravel开发-postmark-inbound-laravel

    而 `postmark-inbound-laravel` 是一个专门为 Laravel 设计的库,用于解析 Postmark 提供的入站邮件数据,帮助开发者更方便地处理来自 Postmark 的邮件。 **1. Postmark 服务** Postmark 是由 Wildbit 公司推出的...

    postmark测试工具

    Postmark测试工具的工作原理是生成一系列随机的邮件记录,每条记录包含一个从1KB到8KB不等的小文件,然后进行读写操作。测试过程包括文件的创建、打开、读取、修改和删除,这些操作都是模拟真实世界中电子邮件服务器...

    Postmark-PHP使用邮戳,您可以毫不费力地发送和接收电子邮件

    【描述】: 邮戳(Postmark)是一款高效的电子邮件服务,而Postmark-PHP是其官方支持的PHP库,使得开发者能够方便地在PHP环境中进行邮件的发送和接收。通过集成这个库,你可以快速地将你的应用程序与Postmark服务连接...

    关于邮件服务的库,比如SendGrid、PostMark、MailGun和Mandrill.zip

    在压缩包中的“Stampie-master”可能是Stampie库的源代码,这是一个PHP库,它为邮件服务提供商(包括上述的SendGrid、PostMark等)提供了一致的接口。使用Stampie,开发者可以轻松切换不同的邮件服务提供商,而无需...

    postmark-templates, 应用程序的摇滚电子邮件模板.zip

    postmark-templates, 应用程序的摇滚电子邮件模板 电子邮件电子邮件模板由给你带来...这是一个完整的电子邮件模板,在大量的电子邮件客户中呈现精美的邮件。 我们将为我们的邮戳模板提供基础,我们很高兴为你提供更广泛

    postmark:用于Postmark API的Golang软件包

    邮戳 用于使用Postmark API的Golang软件包。安装 go get -u github.com/keighl/postmark基本用法拿起您的和您的 。 import ( "github.com/keighl/postmark")client := postmark . NewClient ( "[SERVER-TOKEN]" , "...

    postmark-php:邮戳的官方PHP库

    邮戳(Postmark)是一个由Wildbit公司开发的高效、可靠的电子邮件服务。它以其强大的SMTP服务器和API接口为开发者提供了便捷的邮件发送和管理功能。Postmark专注于提高电子邮件的投递率,通过验证发件人、过滤垃圾...

    postmark-mailer:为Symfony Mailer提供Postmark集成

    它提供了一个统一的API,无论你选择哪种邮件传输方式,如SMTP、SendGrid、Mailgun或Postmark,都能轻松地与之集成。这个组件的设计目标是易于使用、高效且可扩展,旨在替代原有的`SwiftMailer`组件。 `Postmark`是...

    laravel-postmark:用于Laravel的邮戳适配器

    您可以选择使用以下方式发布配置文件: php artisan vendor:publish --tag= " postmark-config " 用法 更新您的.env加入你的服务器的密钥文件和邮件驱动程序设置为postmark 。 MAIL_MAILER =postmark POSTMARK_...

    postmark.js:用于Postmark API的官方Node.js库

    作为Postmark的官方Node.js库,postmark.js支持整个REST API。 用法 请在的查看以获取快速入门教程和有关发送电子邮件的详细说明。 有关一般Postmark API的详细信息,请查看。 安装 安装postmark javascript库非常...

    starter-postmark:基于Postmark的交易电子邮件模板的Maizzle启动器

    这为您提供了一个起点,以便您可以自定义模板以匹配您的品牌。 入门 安装Maizzle CLI: npm install -g @maizzle/cli 用这个启动器搭建一个新项目: maizzle new maizzle/starter-postmark 在本地开发: ...

    python-postmark:适用于Python 2.6和更高版本的邮戳库

    变更日志用法确保您拥有一个邮戳帐户。访问来注册一个帐户。需要邮戳API密钥。导入postmark.PMMail以使用Postmark。有关更多信息,请查看PMMail对象上的类文档。 Django的该库可与Django独立使用。您还可以添加设置...

    postmark binary file

    postmark文件系统性能测试工具二进制文件

    nodemailer-postmark-transport:Nodemailer的邮戳传输

    Nodemailer邮戳运输 Nodemailer的邮戳传输。 要求 版本 Node.js peerDependencies 4.x 10+ nodemailer&gt; = 4.x ...const postmarkTransport = require ( 'nodemailer-postmark-transport' ) ; const transp

    postmark-php:邮戳PHP类

    版权所有2009-2011,Markus Hedlund,Mimmin AB, ,已获得MIT许可。 文件的重新分发必须保留上述版权声明。 其他贡献者 杰夫·唐尼 奥古斯特·特罗米特 赫里斯托·德舍夫(Hristo Deshev...Postmark \ Mail :: compose

    PostMark:一个小的Node.js程序,用于将Postman集合转换为Markdown友好的语法

    一个小的Node.js程序,用于将Postman集合转换为Markdown友好的语法。 PostMark收集了Postman的API路由,并将其转换为Markdown友好的语法,准备将其添加到GitHub README.md文件中。 对于我们的第一阶段,我们使用...

    postmark-spam_check:一个简单的Ruby客户端

    安装将此行添加到您的应用程序的Gemfile中: gem 'postmark-spam_check' 然后执行: $ bundle或将其自己安装为: $ gem install postmark-spam_check用法给它一个原始的电子邮件,以及一个可选的格式和超时。...

    psr-container-postmark:用于Postmark API客户端的PSR-11工厂

    用于Postmark API客户端的PSR-11容器工厂介绍这个很小的库提供了与兼容的工厂,用于为用于发送邮件的服务器或用于管理帐户的admin客户端创建Postmark HTTP客户端。 是一种可靠的交易电子邮件传递服务。 这些工厂从其...

Global site tag (gtag.js) - Google Analytics