- 浏览: 81712 次
- 性别:
- 来自: 重庆
-
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第18章. iText PDF 生成 -
super0555:
managed
第13章 Seam 应用程序框架 -
Javakeith:
代码呢?共享下代码呗!
第18章. iText PDF 生成 -
tonyshen277:
同感啊。还在做Win32下的开发,楼主所说的一个都不能少啊。
转自baidu wqqq 给软件开发初学者 -
kdboy:
的确,把人放在宇宙中去看,从上帝的眼中去看,人的确是非常渺小, ...
人生是什么
现在Seam包含一个用于模板和发送邮件的可选组件。
Email支持由jboss-seam-mail.jar提供。这个jar包含用来构建邮件的邮件 JSF控件和mailSession(邮件会话)管理组件。
examples/mail项目包含一个关于操作邮件支持的例子。它演示了正确的打包,并且包含了一些演示当前支持的关键功能的例子。
你可以使用Seam的集成测试环境测试你的邮件。见章节 35.3.4,“集成测试Seam邮件”
21.1.创建一个消息
你不需要为了使用Seam邮件而学习全部的新模板语言----一个邮件仅仅是一个facelet!
<m:message xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="http://jboss.com/products/seam/mail"
xmlns:h="http://java.sun.com/jsf/html">
<m:from name="Peter" address="peter@example.com" />
<m:to name="#{person.firstname} #{person.lastname}">#{person.address}</m:to>
<m:subject>Try out Seam!</m:subject>
<m:body>
<p><h:outputText value="Dear #{person.firstname}" />,</p>
<p>You can try out Seam by visiting
<a href="http://labs.jboss.com/jbossseam">http://labs.jboss.com/jbossseam</a>.</p>
<p>Regards,</p>
<p>Pete</p>
</m:body>
</m:message>
<m:message>标签打包了整个消息,告诉Seam开始渲染一封邮件。在<m:message>标签内部我们使用一个<m:from>标签来设置消息来自谁,一个<m:to>标签来指定发件人(注意我们如何象我们在普通facelet中使用EL)和一个<m:subject>标签。
<m:body>标签打包了电子邮件的主体。你可以在主体中使用标准的HTML标签就和JSF组件中使用一样。
所以,现在你已经有了你的邮件模板,你要如何发送它?好的,在渲染m:message结束时,mailSession被调用来发送邮件,所以你要做的全部是请求Seam渲染视图:
@In(create=true)
private Renderer renderer;
public void send() {
try {
renderer.render("/simple.xhtml");
facesMessages.add("Email sent successfully");
}
catch (Exception e) {
facesMessages.add("Email sending failed: " + e.getMessage());
}
}
假如,例如,你输入了一个无效的电子邮件地址,那么一个异常将会被抛出,它被捕获并随后显示给用户。
21.1.1. 附件
Seam使电子邮件添加附件变得容易。在处理文件时,它支持被使用的大多数标准java类型。
如果你想要邮寄jboss-seam-mail.jar:
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar"/>
Seam会从类路径加载文件,并附加它到邮件。 默认时,它会以jboss-seam-mail.jar被附加;如果你要想它以其它名字,你只能增加fileName 属性:
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar" fileName="this-is-so-cool.jar"/>
你也可以系上一个java.io.File, 一个 java.net.URL:
<m:attachment value="#{numbers}"/>
或者一个 byte[] 或者一个java.io.InputStream:
<m:attachment value="#{person.photo}" contentType="image/png"/>
你会注意到,对一个byte[] 和一个java.io.InputStream ,你需要指定附加的MIME类型 (与信息没有作为文件的一部分被携带一样).
并且它会更好, 你可以系上Seam产生的PDF, 或者标准的JSF视图, 只用<m:attachment> 包裹你将使用的普通标签:
<m:attachment fileName="tiny.pdf">
<p:document>
A very tiny PDF
</p:document>
</m:attachment>
如果你想系上一组文件(例如从一个数据库加载一组图片),你只需用一个<ui:repeat>:
<ui:repeat value="#{people}" var="person">
<m:attachment value="#{person.photo}" contentType="image/jpeg" fileName="#{person.firstname}_#{person.lastname}.jpg"/>
</ui:repeat>
如果你想在线显示你所系上的图象:
<m:attachment
value="#{person.photo}"
contentType="image/jpeg"
fileName="#{person.firstname}_#{person.lastname}.jpg"
status="personPhoto"
disposition="inline" />
<img src="cid:#{personPhoto.contentId}" />
你可能疑惑cid:#{...}是做什么的。 好的,IETF通过设置它作为你图象的src来指定这个,在试图查找图象(Content-ID必须匹配)时,附件会被看到。— 魔术啊!
在试图访问状态对象前,你必须声明附件。
21.1.2. HTML/Text 可选部分
现今的大多数邮件阅读器支持HTML,而有些并不支持,所以你能添加一个纯文本选项到你的电子邮件主体
<m:body>
<f:facet name="alternative">Sorry, your email reader can't show our fancy email,
please go to http://labs.jboss.com/jbossseam to explore Seam.</f:facet>
</m:body>
21.1.3. 多个收件人
你经常会想要发送一个电子邮件到一群收件人(例如你的用户)。所有的收件人邮件标签都要被放置在<ui:repeat>标签内。
<ui:repeat value="#{allUsers} var="user">
<m:to name="#{user.firstname} #{user.lastname}" address="#{user.emailAddress}" />
</ui:repeat>
21.1.4. 多个消息
然而,有时,你需要发送一个稍有不同的消息到每个收件人(例如,密码重设)。做这个的最好方法就是把消息整个的放到<ui:repeat>标签中:
<ui:repeat value="#{people}" var="p">
<m:message>
<m:from name="#{person.firstname} #{person.lastname}">#{person.address}</m:from>
<m:to name="#{p.firstname}">#{p.address}</m:to>
...
</m:message>
</ui:repeat>
21.1.5. 模板
邮件模板例子显示了仅对Seam邮件标签起作用的facelets模板。
我们的template.xhtml包含:
<m:message>
<m:from name="Seam" address="do-not-reply@jboss.com" />
<m:to name="#{person.firstname} #{person.lastname}">#{person.address}</m:to>
<m:subject>#{subject}</m:subject>
<m:body>
<html>
<body>
<ui:insert name="body">This is the default body, specified by the template.</ui:insert>
</body>
</html>
</m:body>
</m:message>
我们的template.xhtml包含:
<ui:param name="subject" value="Templating with Seam Mail"/>
<ui:define name="body">
<p>This example demonstrates that you can easily use <i>facelets templating</i> in email!</p>
</ui:define>
你也可以在你的电子邮件中使用 facelets源标签,然而你必须用jar放它们在WEB-INF/lib ——当使用Seam Mail时,从web.xml 引用.taglib.xml是不可靠的。 (如果你同步发送你的邮件, Seam Mail无法访问完整的JSF或Servlet上下文, 所以不知道web.xml配置参数)。
如果你在发送邮件时需要做更多Facelets 或JSF的配置,你需要覆盖Renderer 组件并做配置编程——只为高级用户!
21.1.6. 国际化
Seam 支持发送国际化邮件。在默认时下,使用JSF提供的编码,但这可以用模板覆盖:
<m:message charset="UTF-8">
...
</m:message>
主体、主题 和接收人(和发送人) 名字会被编码。你需要确保facelets使用了正确的字符集解析你的页面,通过设置模板的编码 :
<?xml version="1.0" encoding="UTF-8"?>
21.1.7.其它标题
有时你将想要添加其它标题到你的电子邮件上。Seam提供了对此的一些支持(见21.5章:“标签“)。例如,我们可以设置电子邮件的重要性,并询问一个收条:
<m:message xmlns:m="http://jboss.com/products/seam/mail"
importance="low"
requestReadReceipt="true"/>
另外,你可以使用<m:header>标签增加一些标题到消息:
<m:header name="X-Sent-From" value="JBoss Seam"/>
21.2. 接收邮件
如果你在使用EJB,那么你就能用一个MDB(消息驱动bean)来接收电子邮件。JBoss提供一个JCA适配器—mail-ra.rar—但是随JBossAS发布的版本有一定的局限(在一些版本中没有捆绑),因此我们推荐使用随Seam发布mail-ra.rar(它在Seam包中的extras/ directory目录下)。mail-ra.rar应该被放置在$JBOSS_HOME/server/default/deploy目录下;如果你使用的JBoss AS的版本已经有了这个文件,代替它。
你可以象这样配置它:
@MessageDriven(activationConfig={
@ActivationConfigProperty(propertyName="mailServer", propertyValue="localhost"),
@ActivationConfigProperty(propertyName="mailFolder", propertyValue="INBOX"),
@ActivationConfigProperty(propertyName="storeProtocol", propertyValue="pop3"),
@ActivationConfigProperty(propertyName="userName", propertyValue="seam"),
@ActivationConfigProperty(propertyName="password", propertyValue="seam")
})
@ResourceAdapter("mail-ra.rar")
@Name("mailListener")
public class MailListenerMDB implements MailListener {
@In(create=true)
private OrderProcessor orderProcessor;
public void onMessage(Message message) {
// Process the message
orderProcessor.process(message.getSubject());
}
}
每一个收到的消息都将导致 onMessage(Message message) 被调用。 大多数Seam的注释将会在MDB内部运行,但是你不能访问持久上下文。
在http://www.jboss.org/community/docs/DOC-10032你可以查找到mail-ra.rar的在更多信息
如果你没有使用JBoss AS ,你仍然可以使用mail-ra.rar ,或者你能在你的应用程序服务器上找到一个相似的适配器。
21.3. 配置
为使你的应用程序中包含电子邮件支持,应包含jboss-seam-mail.jar在 WEB-INF/lib 目录中。 如果你在使用JBoss AS,对使用Seam的邮件支持不需要做更多的配置。否则,你需要确保你有JavaMail API、一个JavaMail API表示的实现(JBoss AS中使用的API和impl随Seam的lib/mail.jar包一起发布)和一个Java Activation Framework的拷贝(随Seam的 lib/activation.jar 包一起发布)。
注意:Seam的Email模块需要使用Facelets作为视图技术。在将来库版本中也可能会支持JSP。另外,它需要使用seam-ui包。
mailSession 组件使用JavaMail与“真实的”SMTP服务器通讯。
21.3.1. mailSession
如果你工作在JEE环境工作,可以用一个JNDI查找得到可用的JavaMail Session,或者你也可以使用Seam已配置的Session。
有关mailSession组件属性的详细描述见第31.8 节 “与邮件相关的组件”。
21.3.1.1. 用 JBoss AS的JNDI查找
JBossAS deploy/mail-service.xml配置了一个捆绑到JNDI的JavaMail session。 对你的网络可能会需要修改默认的服务配置。描述服务的详情见 http://www.jboss.org/community/docs/DOC-11056 。
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail">
<mail:mail-session session-jndi-name="java:/Mail"/>
</components>
这里我们告诉Seam从JNDI得到捆绑到java:/Mail的
邮件Session。
21.3.1.2. Seam 配置 Session
一个邮件session可以通过 components.xml被配置。 这里我们告诉Seam 使用smtp.example.com作为smtp服务器:
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail">
<mail:mail-session host="smtp.example.com"/>
</components>
21.4. Meldware
Seam的邮件例子使用Meldware (来处 buni.org) 作为邮件服务器。 Meldware 是一个组件包,提供SMTP、 POP3、 IMAP、 网页邮件、共享日历和一个图形界面的管理员工具;它以JEE应用程序方式编写,所以可以与你的Seam应用程序一起被布置到JBoss AS。
警告:随Seam发布的Meldware版本 (需要下载) 是为开发特别量身定制的——每一次应用部署时,邮箱、用户和别名(电子邮件地址)被创建。 如果你想在产品中使用Meldware,你应该从buni.org安装最新的版本。
21.5. 标签
使用http://jboss.com/products/seam/mail 命名空间的标签生成邮件。文档在消息的根部总是有message
标签。消息标签准备让Seam生成一个电子邮件。
facelets的标准模板标签可以象往常一样使用。在主体内部你可以使用 JSF标签; 如果它需要访问外部资源(样式表, javascript),那么一定要设置urlBase。
<m:message>
邮件消息的根标签
- importance — 低、正常或高。默认是正常,这是设置邮件消息重要性。
- precedence — 设置消息的优先级(例如:bulk)
- requestReadReceipt —默认为false,如果设置,一个阅读回执请求将会以发到 From: address方式的阅读回执被添加。
- urlBase — 如果设置,此值预先考虑requestContextPath,其允许你在你的邮件中使用如 <h:graphicImage> 的组件。
- messageId —明确设置Message-ID
<m:from>
- 为邮件设置来源地址。 每个电子邮件你只能设置一个。
- name — 电子邮件应来自的名字。
- address —电子邮件应来自的电子邮件地址。
<m:replyTo>
为电子邮件设置回复地址。每个电子邮件你只能设置一个。
- address —电子邮件应来自的电子邮件地址。
<m:to>
添加一个收件人到邮件。 对多个收件人使用多个<m:to> 标签。这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人名字。
- address —收件人的电子邮件地址。
<m:cc>
添加抄送人到邮件。有多个抄送人时使用多个<m:cc>标签。这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人的名字。
- address — 收件人的邮件地址。
<m:bcc>
添加一个秘文抄送人到邮件。有多个秘文抄送人时使用多个的<m:bcc>标签。 这个标签可以被安全的放置在如<ui:repeat>的迭代器标签中。
- name — 收件人的名字。
- address — 收件人的邮件地址。
<m:header>
向邮件添加一个头(例如:X-Sent-From: JBoss Seam)。
- name — 要添加的头的名字(例如:X-Sent-From)。
- value — 要添加的头的值(例如:JBoss Seam)。
<m:attachment>
添加一个附件到邮件。
- value — 要添加的附件:
o String —一个 String作为在classpath中文件的路径被解释。
o java.io.File —一个引用 File 对象的EL表达式。
o java.net.URL — 一个引用URL对象的EL表达式。
o java.io.InputStream — 一个引用 InputStream的EL表达式。 这种情况下,fileName 和 contentType 都必须指定。
o byte[] — 一个引用 byte[] 的EL表达式。 这种情况下,fileName 和 contentType 都必须指定。
如果值属性被省略:
o 如果这个标签包含一个 <p:document> 标签,这个被描述的文档将会被生成并且附加到邮件上。 fileName 应该被指定。
o 如果这个标签包含其它的JSF标签,将会根据它们生成HTML文档并附加到邮件。fileName应该被指定。
- fileName — 对使用的附件指定文件名。
- contentType —指定附件的MIME类型。
<m:subject>
设置邮件的主题。
<m:body>
设置邮件主体。支持 alternative facet,如果生成的一个HTML邮件可能包含对一个不支持html的阅读器而言的可选文本。
- type — 如果设为 plain,那么会生成一份简单文本邮件,否则将会生成一份HTML邮件。
发表评论
-
第31章. Seam内建组件
2009-05-28 11:51 1498第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1636第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1467第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1580第29章. 配置Seam和打包Seam应用程序 配置 ... -
第28章. Hibernate搜索
2009-05-26 20:17 153828.1. 介绍 如Apache Lucen ... -
第27章. Spring框架集成
2009-05-26 20:16 1444第27章. Spring框架集成 Spring集成 ... -
第26章. Seam和Google网页工具
2009-05-26 20:15 1244第26章. Seam和Google网页工具 ... -
第25章. 远程
2009-05-26 20:15 1326第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1714第24章. Web服务 Seam 集成了JBossWS, ... -
第23章. 缓存
2009-05-26 20:14 1465第23章. 缓存 在 ... -
第22章. 异步和消息
2009-05-26 20:12 2168第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第 20章. RSS支持
2009-05-26 20:10 834第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1854第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6529第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 1040第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1436第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 941第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 102315.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1459第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1444第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
第一章:Magento介绍...................................................................................................................4 Magento 的特色.....................................................
第1 章 初识Visual Basic 2010 ............ 1 1.1 事件驱动编程 .............................. 2 1.2 安装Visual Basic 2010 ................ 3 1.3 Visual Basic 2010 集成开发 环境 ....................
第一章 Windows Server 2003 系统..............................................................................................5 第一节 Windows Server 2003 系统介绍........................................
第一章 网络绪论............................................................................................................................... 1 1.1 历史..................................................
第一章 Windows Server 2003 系统..............................................................................................5 第一节 Windows Server 2003 系统介绍........................................
9.2 Email........ 126 9.3 图像......... 127 9.4 XML ........ 133 9.5 XML Web Service ..... 141 第 10 章安全性. 149 附录 155 附录 1 Microsoft Mobile Internet Toolkit 兼容设备........ 155 附录2 ...
网络营销,作为一种基于互联网的新型营销方式,是现代企业利用互联网技术和平台,以现代营销理论为基础,实现其营销目标的重要手段。它涵盖了信息收集、信息发布、销售促进、顾客服务与顾客关系管理、网址推广等多个...
【第21章】ValidateBox(验证框)组件详解 ValidateBox是EasyUI中的一个关键组件,用于实现表单验证,确保用户输入的数据符合特定的格式或规则。它依赖于Tooltip组件来显示验证提示信息。本章将详细介绍ValidateBox...
│ │ │ │ flask_email.py │ │ │ │ flask_test.py │ │ │ │ ftpClient.py │ │ │ │ ftpServer.py │ │ │ │ getIP_MAC.py │ │ │ │ index.py │ │ │ │ index1.asp │ │ │ │ pachong.py │ │...
网络营销是21世纪商业活动中不可或缺的一部分,它利用互联网技术和通信技术来实现企业的市场调查、客户分析、产品开发、销售策略制定、售后服务等多个环节。网络营销的出现源于现代电子技术的发展、消费者价值观的...
网络营销是21世纪商业活动中不可或缺的一部分,它借助互联网技术和通信技术的发展,打破了传统营销的时空界限,赋予了营销活动更多的创新可能性。网络营销的定义涵盖了利用互联网进行的各种营销活动,包括但不限于...
13. 网络主机的IP地址由32位二进制数字组成,通常被表示为4个十进制数字,每个数字0-255。 14. OSI(Open Systems Interconnection)参考模型的最底层是物理层,负责传输原始比特流。 15. 关于模板,错误的说法是...
第21章 Windows 98 第22章 Windows 98拨号网络 第23章 Windows NT 4.0 第24章 在Novell NetWare中支持IP 第七部分 使用TCP/IP应用 第25章 Whois和Finger 第26章 文件传输协议 第27章 使用Telnet 第28章 使用r系列...
第21章 Windows 98 第22章 Windows 98拨号网络 第23章 Windows NT 4.0 第24章 在Novell NetWare中支持IP 第七部分 使用TCP/IP应用 第25章 Whois和Finger 第26章 文件传输协议 第27章 使用Telnet 第28章 使用r系列...
2. 第二阶段:电子计算机(1946-1958):电子管的发明使计算机的发展进入了一个新的阶段。 3. 第三阶段:晶体管计算机(1958-1964):晶体管的发明使计算机的速度和可靠性得到了改善。 4. 第四阶段:集成电路计算机...
在SQL(Structured Query Language)数据库的学习中,第二章通常会涉及基本的数据库概念、SQL语法以及数据操作。在这个阶段,学生会被要求掌握如何创建数据库、定义数据表结构、插入数据、查询数据等核心技能。下面...
计算机经历了四个时代,其划分主要依据是计算机的“构成元件”:第一代主要元件是电子管,第二、三代分别是晶体管和集成电路。ENIAC 是第一台电子计算机的英文缩写。 2. 计算机分类 计算机可以分类为电子数字...
Ajax完全自学手册PPT和源代码分来上传了,需要PPT的请自己在我的资源里面查找。 1.本书1~22章所附代码的...第21章(\C11) Thirf 电视节目预告 Thirf 翻译模块 第22章(\C11) Advertisement 内文广告系统
第21章 电影播放器 第22章 AVI视频制作编程 第23章 文字语音朗读编程 第24章 浏览EXE或DLL文件的所有图标 第25章 BMP位图操作 第26章 滚动浏览位图 第27章 透明位图背景上的滚动字幕实例 第28章 小波算法的VC实现 第...