`
jackle_liu
  • 浏览: 147991 次
文章分类
社区版块
存档分类
最新评论

基于seam框架的嵌入式广告(embedded javascript)实现

阅读更多

目前有很多网站都提供javascript脚本供其他网站来引用自己的内容,像广告,新闻等等。典型案例如 “google adsense”

 

最近用seam实现了一个比较简易的应用,耗费了3个工作日,实现上面也是由繁入简,目前这个实现应该是比较简单了。在此愿意与大家分享。

 

由于我的例子比较简单,因此只用了一个类ConsumerEmbeddedJavascriptAction。既输出javascript和css,由其他网站来应用;而当其他网站引用javascript时,实际调用的还是这个类来产生相应的内容。

 

@Name("consumerEmbeddedJavascriptAction")
@Scope(ScopeType.PAGE)
public class ConsumerEmbeddedJavascriptAction implements Serializable {

	private static final long serialVersionUID = -7550289081159249326L;


	@In
	UserBean sessionUser;

	@In (create=true)
	private EntityManager entityManager;
	

	@RequestParameter("contentType")
	String contentType;
	
	/**
	 * 生成嵌入的css和js脚本,JS脚本的生成就在当前类的getEmbeddedJsText()方法
         * 中,css稍后我会列出。形如
	 * <link rel="stylesheet" href="http://localhost:8080/embeddedjs.css" />
	 * <script src=="http://localhost:8080/embedded_javascript.seam?contentType=AD" />
	 * @return
	 */
	@Factory(value = "embeddedJsReferenceForContents", scope = ScopeType.PAGE, autoCreate = false)
	public String getEmbeddedJsReference() {
		HttpServletRequest request = FacesUtil.getServletRequest();
		String requestPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
		StringBuilder remoteReference = new StringBuilder();
		remoteReference.append("<link rel=\"stylesheet\" href=\""+requestPath+"ver20/embeddedjs.css\" />");
		remoteReference.append("<script src=\""+requestPath+"ver20/embedded_javascript.seam?contentType="+EntityTWContent.TYPE_NEWS+"\"></script>");
		return remoteReference.toString();
	}
 

	@Factory(value = "embeddedJsForContents", scope = ScopeType.PAGE, autoCreate = false)
	public String getEmbeddedJsText() {
		String query = "";
		/**
		 * 构造查询语句....
		 */
		Query q = this.entityManager.createQuery(query);
		
		Collection<EntityTWContent> contentList = q.getResultList();
		return  getHtmlContent(contentList);
	}

	/**
	 * 根据数据库的数据产生输出的html,并由js脚本document.write()输出。
	 * 
	 * @return
	 */
	private String getHtmlContent(Collection<EntityTWContent> contentList){
		HttpServletRequest request = FacesUtil.getServletRequest();
		String requestPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
		StringBuilder html = new StringBuilder();
		html.append("document.write(\"<div id='twid_container'>\");");
		for(EntityTWContent content:contentList){
			html.append("document.write(\"<div id='subjectColumn'>");
			html.append("<a href='"+requestPath+"c/"+content.getContentId()+"'>"+content.getSubject()+"</a>");
			html.append("</div>\");");
			html.append("document.write(\"<div id='publishTimeColumn'>");
			html.append(content.getPublishTime());
			html.append("</div>\");");
			html.append("document.write(\"<div style='clear:both;'></div>\");");
			html.append("document.write(\"<div id='summaryColumn'>");
			html.append(content.getSummary());
			html.append("</div>\");");
			html.append("document.write(\"<div style='clear:both;'></div>\");");
		}
		html.append("document.write(\"</div>\");");
		return html.toString();
	}
 

	public String getContentType() {
		return contentType;
	}

	public void setContentType(String contentType) {
		this.contentType = contentType;
	}
    
}

 

然后是输出javascript引用的xhtml文件,其他网站可以从文本框中将类似的内容拷贝到自己的html页面中( <link rel="stylesheet" href="http://localhost:8080/embeddedjs.css" /> <script src=="http://localhost:8080/embedded_javascript.seam?contentType=AD" />):

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:s="http://jboss.com/products/seam/taglib"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:c="http://java.sun.com/jstl/core">
<body>

            <h:form>
			<h:inputTextarea value="#{embeddedJsReferenceForContents}" cols="80"
								rows="5" />
			</h:form>
		
	
</body>
</html>

 

当<script src=="http://localhost:8080/embedded_javascript.seam?contentType=AD" />被执行时,另一个xhtml页面:embedded_javascript.xhtml将会被调用,这个页面更简单。

<f:view xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
  <f:view contentType="application/x-javascript" />
  <h:outputText value="#{embeddedJsForContents}" escape="false"/>
	

</f:view>

 

到此,所有的工作全部完成。噢,还差一个,css文件:embeddedjs.css,其他网站可以仿照这个css加入自己的css。

 

 

#twid_container {
	width:400px;
}
#subjectColumn{
	float: left;
	margin-top: 0px;
	padding-top: 0px;
	margin-bottom: 0px;
	font-weight: bold;
	font-size: 14px;
}
#publishTimeColumn{
	margin-top: 0px;
	margin-bottom: 0px;
	padding-right: 10px;
	padding-top: 0px;
	font-size: 11px;
	vertical-align: top;
	float: right;
}
#summaryColumn{
	float: left;
	margin-top: 0px;
	padding-top: 0px;
	margin-bottom: 0px;
	font-size: 13px;
}
 

 

1
0
分享到:
评论

相关推荐

    基于Seam框架实现省、市、区县的联动选择

    首先,Seam框架是一个基于Java EE的全栈框架,它集成了JSF、EJB、CDI和JPA等多个技术,提供了一种声明式编程模型,简化了企业级应用的开发。在实现省市区联动选择时,Seam框架可以有效地管理组件之间的交互和状态,...

    Seam框架文档简述

    Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分利用JDK 5.0中的注解技术,为开发人员提供了构建复杂...

    基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》全书

    它是基于Seam 2.1版本编写的,旨在帮助读者深入了解Seam框架的工作原理及其在Java EE环境中的应用。本书不仅涵盖了Seam框架的核心概念和技术细节,还提供了大量实际案例和最佳实践,使读者能够快速上手并构建高质量...

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    Seam_Java框架.doc

    Seam的这种全栈式框架特性使得它可以隐藏这些底层实现,减轻了开发者的负担。 另外,Seam对第三方框架的集成深度令人印象深刻。除了基础的邮件服务、工作流支持,Seam还能够轻松整合其他工具和库,如EJB、JMS、WS等...

    seam 框架整合hibernate+jsf

    例如,Seam可以自动管理Hibernate的Session,提供事务控制,以及实现基于注解的实体管理和查询。 JavaServer Faces (JSF) 是一种用于构建Web用户界面的MVC(模型-视图-控制器)框架。JSF组件库强大,可帮助开发者...

    Seam 2.1 安全模块框架

    3. **权限验证**:Seam 包含一个广泛适用的权限验证框架,支持基于角色的访问控制(RBAC)、持久化权限设置以及规则驱动的权限决策。这使得开发者可以根据业务逻辑创建自定义的安全策略。 4. **权限管理**:Seam ...

    基于seam的datatable全选解决方案

    在文档"基于seam的datatable多选解决方案.doc"中,应该详细阐述了上述过程的实现步骤,包括必要的代码示例和配置指导。通过阅读这份文档,开发者可以了解到如何在Seam项目中实现DataTable的全选功能,从而提高应用的...

    基于Seam Carving和深度学习的车标识别系统研究与实现.pdf

    Seam Carving是一种图像处理技术,能够在不损害图像重要特征的前提下,实现图像的智能缩放。其核心在于通过能量梯度函数来选择插入或删除的裁切线,从而获取图像重要特征能量的最小通道,保证图像重要特征在缩放过程...

    MATLAB_Seam_Carving_seamcarving_

    Seam Carving是一种基于能量的图像缩放技术,由Ariel Shamir和Shai Avidan在2007年提出。它的核心思想是找出图像中的一条或多条“能量最低”的路径(seam),沿着这些路径删除或添加像素,从而实现图像的等比例或非...

    使用JBoss Studio開發Seam框架專案(圖式教學)

    **使用JBoss Studio开发Seam框架项目图式教学** Seam框架是一款强大的Java EE集成框架,它简化了在企业级应用程序中的开发流程,特别是在使用EJB、JSF、CDI和JPA等技术时。而JBoss Studio是Red Hat公司推出的一款...

    seam in action

    ### Seam 框架知识点详解 #### 一、Seam框架概述 - **定义与特点**:Seam是一个建立在Java EE平台上的快速应用开发框架,它极大地简化了企业级应用的开发流程。通过整合一系列Java EE技术如JSF、EJB 3.0等,Seam...

    JBoss Seam

    JBoss Seam是一个开源的应用框架,它基于Java EE标准,但通过引入一系列创新特性,极大地简化了企业级应用的开发过程。Seam框架主要针对Web应用的构建,它将各种Java EE技术如JSF(JavaServer Faces)、EJB...

    基于Seam Carving实现图像的重定位-计算机图像与图形技术大作业

    Seam Carving实现图像的重定位——计算机图像与图形技术大作业 其中,实验部分包含以下的实验及结果: 图像剪裁:将原图像剪裁为指定尺寸,并保持主体内容完整且比例正常。 2.图像重定向(Retarget):将原图像...

    基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》摘要

    ### 基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》摘要分析 #### 核心概念:Seam框架概述 Seam框架是一款革命性的Web应用开发框架,它将标准的Java EE技术与一系列...

    seam一些基本功能的实现方法

    Seam还支持AJAX(异步JavaScript和XML),通过Seam Faces组件库,开发者可以轻松创建富客户端界面,实现页面部分更新。例如,`s:ajax`和`f:ajax`标签可以帮助我们在JSF(JavaServer Faces)视图中添加AJAX行为,提升...

    seam_reference英文文档,讲解Seam更详细

    - **“拉取”式MVC的使用**:这部分介绍了如何利用Seam框架实现基于“拉取”式的模型视图控制器(MVC)模式。 - **可书签搜索结果页**:通过博客示例,解释了如何创建可被收藏的搜索结果页面。 - **在RESTful应用中...

    课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip

    课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现...

    Jboss seam3 实战

    JBoss Seam是一个开源的Java EE框架,它通过依赖注入和会话模型,简化了基于Java EE的企业级应用开发。Seam框架为开发者提供了一个集成化的环境,其中整合了多种技术规范,比如EJB3、JSF、JPA、SessionBean、MDB和...

Global site tag (gtag.js) - Google Analytics