在JavaEE6中使用JSF2.0简化页面制作

【精选译文】过去几个星期,对Java EE 6的新特性进行了一系列介绍。除了Servlet 3.0的特性,Java EE 6也使用了新的JSF 2.0标准。下面我们来看一看JSF 2.0是如何简化页面制作并提供Ajax支持的。***,我们对Servlet 3.0和JSF 2.0的新特性进行了总结。

简化JSF 2.0页面制作

JavaServer Faces技术提供了一个服务端组件框架,简化了Java EE应用程序用户界面的开发,其中最显著的改进是页面制作,通过使用标准的JavaServer Faces视图声明语言(JavaServer Faces View Declaration Language,俗称Facelets)创建一个JSF页面更加容易。

Facelets

Facelets是一个强大的轻量级声明语言,可以使用它展示一个JSF页面,使用Facelets时,你可以使用HTML风格的模板展示一个JSF页面,也可以构建一个组件树,JSF应用程序中的用户界面通常是由JSF组件构成的JSF页面,Facelets在JSP之上提供了更多优点。

在JSP中,Web页面中的元素是按照渐进顺序处理和渲染的,而JSF提供了它自己的处理和渲染顺序,这可能会导致不可预测的行为发生,Facelets解决了这个问题,通过模板,Facelets也允许代码复用,可以大大减少开发UI的时间,现在Facelets已经成为构建JSF应用程序的***技术。

Facelets通常是使用XHTML标记语言编写的,因此Facelets是可以跨不同开发平台的,下面是Java EE 6教材中提供的JSF页面的Facelets XHTML代码部分:

 
 
 
 
  1.  
  2.            
  3.            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.    
  5.            xmlns:f="http://java.sun.com/jsf/core" 
  6.            xmlns:h="http://java.sun.com/jsf/html" 
  7.            xmlns:ui="http://java.sun.com/jsf/facelets"> 
  8.     
  9.            Guess Number JSF Application 
  10.     
  11.     
  12.        
  13.        

     

  14.        Hi. My name is Duke. I am thinking of a number from  
  15.                to  
  16.                  
  17.        .  
  18.        

     

  19.          Can you guess it ?  
  20.        

     
  21.         
  22.        
  23.              value="#{UserNumberBean.userNumber}"> 
  24.           converterMessage="#{ErrMsg.userNoConvert}"> 
  25.        
  26.              minimum="#{UserNumberBean.minimum}" 
  27.              maximum="#{UserNumberBean.maximum}"/> 
  28.         
  29.        
  30.              action="success" value="submit" /> 
  31.        
  32.                   style="color: red;  
  33.                    font-family: 'New Century Schoolbook', serif;  
  34.                    font-style: oblique;  
  35.                    text-decoration: overline"  
  36.                    id="errors1" 
  37.                    for="userNo"/> 
  38.         
  39.        
  40.     
  41.     
  42.  

页面渲染效果如图1所示。

 
图 1 使用Facelets创建的用户界面

这个Facelets XHTML页面和普通JSP页面并没有多大不同,Facelets支持JSF和JSTL标签库,它也包括一个Facelets标签库,支持功能丰富的页面模板。命名空间声明xmlns:ui="http://java.sun.com/jsf/facelets"就是针对facelets标签库的,但这里没有使用facelets标签库的标签,facelets也支持统一的表达式语言。

模板

使用模板,你可以创建一个页面作为应用程序中其它页面的模板,这样可以避免多次创建结构类似的页面,同时也可以统一应用程序中多个页面的视觉风格。

Facelets标签库包括一个模板标签,为了实施模板化,首先创建一个包括标签的模板页面,然后创建一个使用这个模板的客户端页面,在客户端页面中,使用标签指定模板,使用标签指定插入到模板中的内容。

下面是一个模板页面的内容:

 
 
 
 
  1.  
  2.    
  3.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5.    
  6.          xmlns:ui="http://java.sun.com/jsf/facelets" 
  7.          xmlns:h="http://java.sun.com/jsf/html" 
  8.  
  9.        
  10.          <ui:insert name="title">Page Title</ui:insert 
  11.        
  12.        
  13.           
     
  14.                
  15.           
 
  •           
     
  •                
  •          
  •  
  •        
  •     
  •  
  • 下面是使用这个模板的客户端页面代码:

     
     
     
     
    1.  
    2.     
    3.  
    4.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    5.  
    6.     
    7.           xmlns:ui="http://java.sun.com/jsf/facelets" 
    8.           xmlns:h="http://java.sun.com/jsf/html" 
    9.       
    10.         
    11.            This text will not be displayed.  
    12.             
    13.                Welcome page  
    14.             
    15.             
    16.                ... [Links should be here]  
    17.             
    18.             
    19.                ... [Data should be here]  
    20.             
    21.         
    22.            This text also will not be displayed.  
    23.       
    24.      

    当客户端调用这个模板时,它使用标题Welcome Page渲染这个页面,这个页面显示了两部分内容,一个显示客户端中指定的链接列表,另一个显示客户端中指定的数据。

    混合组件

    混合组件时JSF中的一个新特性,通过它创建自定义JSF组件会更加容易。你可以使用JSF页面标记和其它JSF组件创建混合组件。在Facelets的标注下,任何XHTML页面都可以变成一个混合组件。此外,混合组件可以有验证器,转换器和监听器。

    创建好混合组件后,你可以将它保存到库中,以后有需要时就可以调用了。

    让我们创建一个渲染为登录面板的混合组件,用户登录时,组件反馈一个登录事件,如图2所示。

     
    图 2 登录面板混合组件

    下面是混合组件的源代码:

     
     
     
     
    1.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    2.    
    3.       xmlns:h="http://java.sun.com/jsf/html" 
    4.       xmlns:f="http://java.sun.com/jsf/core"> 
    5.       xmlns:f="http://java.sun.com/jsf/facelets"> 
    6.       xmlns:composite="http://java.sun.com/jsf/composite"> 
    7.  
    8.     
    9.    This content will not be displayed in the rendered output 
    10.     
    11.  
    12.     
    13.      
    14.             
    15.      
    16.      
    17.       
    18.     
    19.  
    20.        
    21.  
    22.     
    23.  
    24.     
    25.  
    26.        
    27.  
    28.     
    29.  
    30.     
    31.  
    32.        
    33.  
    34.     
    35.  
    36.      
    37. Username:   
      Password: 
       
    38.      
    39.     
    40.     
    41.  

    xmlns:composite="http://java.sun.com/jsf/composite"声明了混合UI组件的命名空间,标签声明混合组件的使用契约,标签在使用契约中指定标签,这个表示组件可以暴露一个事件,让使用这个混合组件的页面可以轻松访问它。
    标签定义了混合组件的实现,这里的实现是一个简单的表,它包括用户名、密码和登录按钮JSF组件。

    为了让混合组件可用,将代码保存为XHTML文件,将文件放到应用程序根目录下resources目录的子目录中即可。子目录的名字可以采用包含混合组件的资源库名字,JSF运行时通过向混合组件的标签名后追加.xhtml后缀查找混合组件。例如,如果你将标签命名为loginPanel,那么保存为混合组件的文件名就是loginPanel.xhtml。然后你就可以在Web页面中使用混合组件了,下面就是一个使用混合组件的Web页面代码示例:

     
     
     
     
    1.    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
    2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    3.    
    4.       xmlns:h="http://java.sun.com/jsf/html" 
    5.       xmlns:f="http://java.sun.com/jsf/core" 
    6.       xmlns:ui="http://java.sun.com/jsf/facelets" 
    7.       xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"> 
    8.  
    9.     
    10.    Example 01>/title> </li> <li>   <style type="text/css"> </li> <li>   .grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;  }  </li> <li>   </style> </li> <li>   </h:head> </li> <li> </li> <li>   <h:body> </li> <li>     <p>Usage of Login Panel Component</p> </li> <li> </li> <li>        <ui:debug hotkey="p" rendered="true"/> </li> <li> </li> <li>     <h:form> </li> <li>         <div id="compositeComponent" class="grayBox" style="border: 1px solid #090;"> </li> <li>            <ez:loginPanel> </li> <li>                <f:actionListener for="loginEvent" type="example01.LoginActionListener" /> </li> <li> </li> <li>            </ez:loginPanel> </li> <li>         </div> </li> <li>     <p><h:commandButton value="reload" /></p> </li> <li> </li> <li>     <p><h:outputText value="#{loginActionMessage}" /></p> </li> <li>     </h:form> </li> <li> </li> <li>   </h:body> </li> <li>   </html> </li> <li> </li> </ol></pre><p>注意声明xmlns:ez="http://java.sun.com/jsf/composite/ezcomp",它指定了混合组件的命名空间和前缀,这里的ezcomp是资源目录的子目录名,JSF使用下面的约定:所有命名空间URI都以http://java.sun.com/jsf/composite/开头,使用资源库的名称结束。</p><p><strong><f:actionListener></strong></p><p>标签关联混合组件的行为监听器,标签中的for属性表示这个监听器是为混合组件上名为loginEvent行为事件准备的,你需要编写代码来处理事件,例如:</p><pre> <ol> <li>import javax.faces.component.UIComponent;  </li> <li> import javax.faces.component.ValueHolder;  </li> <li> import javax.faces.context.FacesContext;  </li> <li> import javax.faces.event.AbortProcessingException;  </li> <li> import javax.faces.event.ActionEvent;  </li> <li> import javax.faces.event.ActionListener;  </li> <li> </li> <li> public class LoginActionListener implements ActionListener {  </li> <li> </li> <li>     public void processAction(ActionEvent event) throws AbortProcessingException {  </li> <li>         FacesContext context = FacesContext.getCurrentInstance();  </li> <li>         context.getExternalContext().getRequestMap().put("loginActionMessage",  </li> <li>                 "Login event happened");  </li> <li>     }  </li> <li> }  </li> </ol></pre><p>#p#</p><p><strong>JSF 2.0对Ajax的支持</strong></p><p>JSF 2.0天生就支持Ajax,利用Ajax技术,Web应用程序在后台以异步的方式从服务器获取数据。支持Ajax后,允许页面局部刷新,允许选择视图中的一个组件进行处理而不影响其它组件。</p><p>要在JSF中使用Ajax,需要访问有资源标识符的JavaScript资源jsf.js,它存在于javax.faces资源库中,包含让JSF与Ajax交互的JavaScript API,JavaScript API由一组标准的JavaScript函数组成,使JavaServer Faces框架中的Ajax操作变得简单了,你几乎不用直接包括这个文件,当你使用任何开启Ajax的标签或组件时,JSF会自动包括它。然后你就可以使用<f:ajax>标签或调用JavaScript API中的函数了。</p><p>下面是一个使用<f:ajax>标签的示例:</p><pre> <ol> <li><h:commandButton id="button1"> </li> <li>      <f:ajax execute="..." render="..."/> </li> <li>   </h:commandButton> </li> <li> </li> </ol></pre><p>这里的<f:ajax>标签是嵌套在<h:commandButton>标签内的,这样会结合在execute属性中指定的Ajax行为和<h:commandButton>标签呈现的命令按钮,你也可以指定一个event属性来识别JavaScript DOM事件,如果你不指定event属性,JSF使用组件的默认行为,这里的默认行为是onclick,因此JSF结合execute属性中指定的Ajax请求和呈现按钮的onclick事件。用户点击该按钮时,JSF提交Ajax请求给服务器。</p><p>使用<f:ajax>标签的一个好处是不用在页面中指定载入jsf.js,它会自动为你载入,相比之下,如果你调用JavaScript API,首先需要使用<h:outputScript>让jsf.js对当前视图可用,例如:</p><pre> <ol> <li><f:view contentType="text/html"/> </li> <li>     <h:head> </li> <li>       <meta... </li> <li>       <title... </li> <li>     </h:head> </li> <li>     <h:body> </li> <li>       ...  </li> <li>       <h:outputScript name="jsf.js" library="javax.faces" target="body"/> </li> <li>       ...  </li> <li>     </h:body> </li> <li>     ...  </li> <li> </li> </ol></pre><p>然后才可以使用JavaScript API中的函数产生Ajax请求。例如,你使用JavaScript函数jsf.ajax.request向服务器发送一个请求,如下面的代码:</p><pre> <ol> <li><h:commandButton id="button1" value="submit"> </li> <li>   onclick="jsf.ajax.request(this,event);" /> </li> <li> </li> </ol></pre><p>代码包括一个<h:commandButton>标签,它呈现为一个按钮,用户点击这个按钮时,向服务器提交一个Ajax请求。</p><p><strong>Servlet 3.0和JSF2.0中的更多新特性</strong></p><p>Servlet 3.0中另一个新特性是允许你使用ServletContext类中的方法通过编程在Web应用程序启动时向其添加Servlet和Servlet过滤器,使用addServlet()方法添加Servlet,使用addFilter()添加Servlet过滤器。结合可插拔式共享框架特性,Web框架可以在无开发人员介入的情况下实现自我配置。</p><p>#t#此外Servlet 3.0加入了许多安全特性,除了声明安全外,Server 3.0通过HttpServletRequest接口提供了编程安全,例如,你可以在应用程序中使用HttpServletRequest的authenticate()方法执行用户名和密码的收集,或者使用login()方法指向容器验证一个非强制请求上下文中的请求调用者。有关Servlet 3.0的更多特性,请参阅JSR 315规范。</p><p>JSF 2.0中的一些额外增强与资源如何打包和处理有关,JSF 2.0标准化了打包哪里的资源。所有资源都放在resources目录或一个子目录下,资源需要按顺序正确地进行渲染,例如CSS文件和JavaScript文件,图3显示了Netbeans中的一个JSF项目部分结构及文件,注意其中的resources目录,CSS和images目录。</p><p> <br /> 图 3  JSF应用程序中resources目录下的资源</p><p>JSF 2.0也包括显示和处理资源的API,使用javax.faces.application.Resource类显示一个资源,使用javax.faces.application.ResourceHandler类创建资源的实例。有关JSF 2.0的更多信息,请参阅JSR 314规范。</p><p>【译稿,非经授权请勿转载。合作站点转载请注明原文译者和出处为,且不得修改原文内容。】</p><p>原文:Introducing the Java EE 6 Platform 作者:Ed Ort</p> <p> 本文题目:<a href="http://www.csdahua.cn/qtweb/news26/321326.html">在JavaEE6中使用JSF2.0简化页面制作</a> <br> 标题路径:<a href="http://www.csdahua.cn/qtweb/news26/321326.html">http://www.csdahua.cn/qtweb/news26/321326.html</a> </p> <p> 网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等 </p> <p class="adpic"> <a href="https://www.cdcxhl.com/service/ad.html" target="_blank" class="ad">广告</a> <a href="" target="_blank" class="adimg"><img src=""></a> </p> <p class="copy"> 声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: <a href="http://www.csdahua.cn/" target="_blank">快上网</a> </p> </div> <div class="newsmorelb"> <p>成都快上网为您推荐相关内容</p> <ul> <li> <a href="/qtweb/news25/321325.html">大致了解ADO.NET参数相关问题</a> </li><li> <a href="/qtweb/news24/321324.html">Redis生产环境优化内存配置(redis生产内存配置)</a> </li><li> <a href="/qtweb/news23/321323.html">Redis实时监听新增数据(redis监听新增)</a> </li><li> <a href="/qtweb/news22/321322.html">Linux发现不了网卡的解决方法(linux中识别不到网卡)</a> </li><li> <a href="/qtweb/news21/321321.html">疯狂007连接验证服务器出现错误,怎么办?(疯狂007连接验证服务器出现错误)</a> </li><li> <a href="/qtweb/news20/321320.html">服务器网卡能用万能驱动吗,稳定性怎么样啊</a> </li><li> <a href="/qtweb/news19/321319.html">云虚拟主机如何设置404页面</a> </li><li> <a href="/qtweb/news18/321318.html">可爱的Python函数式编程(一)</a> </li><li> <a href="/qtweb/news17/321317.html">DedeCms标签中的文档列表标签是什么</a> </li> </ul> </div> </div> <div class="col-lg-3 noneb"> <div class="bkright" style="margin-top: 0"> <p><a href="https://www.cdcxhl.com/news/biaoqianseo/">标签优化知识</a></p> <ul> <li> <a class="text_overflow" href="/qtweb/news32/184432.html">处理数据网站_清空网站数据</a> </li><li> <a class="text_overflow" href="/qtweb/news13/238513.html">麻烦处理一下域名的核验-市场咨询</a> </li><li> <a class="text_overflow" href="/qtweb/news16/35066.html">海外虚拟云主机试用稳定性差怎么解决的</a> </li><li> <a class="text_overflow" href="/qtweb/news8/407258.html">ubuntu系统服务设置命令chkconfig怎么用</a> </li><li> <a class="text_overflow" href="/qtweb/news26/319326.html">快速上手!LinuxGadget安装及使用教程(linuxgadget安装)</a> </li><li> <a class="text_overflow" href="/qtweb/news15/145215.html">如何进行 SQL2023 数据库修复? (sql2023数据库修复)</a> </li><li> <a class="text_overflow" href="/qtweb/news5/497855.html">如何给网站进行备案?详细步骤和注意事项</a> </li><li> <a class="text_overflow" href="/qtweb/news2/420102.html">对敏捷开发的五大误解</a> </li><li> <a class="text_overflow" href="/qtweb/news43/55193.html">境外vps主机租用有哪些优势</a> </li><li> <a class="text_overflow" href="/qtweb/news32/281032.html">html5页面如何切图</a> </li><li> <a class="text_overflow" href="/qtweb/news6/367856.html">公司服务器群组要多少台?(公司服务器群组要多少台设备)</a> </li><li> <a class="text_overflow" href="/qtweb/news16/206566.html">怎么使用pv命令监控Linux命令的执行进度</a> </li><li> <a class="text_overflow" href="/qtweb/news18/270968.html">为什么开电脑时出现用户选择登陆?(开机出现登录windows)</a> </li><li> <a class="text_overflow" href="/qtweb/news21/179121.html">IIS安全教程:安全管理IIS中的虚拟目录</a> </li><li> <a class="text_overflow" href="/qtweb/news21/361521.html">互联网时代,如何做好网络营销</a> </li> </ul> </div> <div class="bkright tag"> <p><a href="https://www.cdcxhl.com/hangye/link.html" target="_blank">各行业网站</a></p> <ul> <li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/shipindai/" target="_blank">食品包装袋</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/blgds/" target="_blank">玻璃钢雕塑</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/bolimo/" target="_blank">玻璃贴膜</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/xiaojbc/" target="_blank">小搅拌车</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/mbzx/" target="_blank">木包装箱</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/tongdiaosu/" target="_blank">铜雕雕塑</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/zaomaoji/" target="_blank">凿毛机</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/jbgc/" target="_blank">搅拌罐车</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/qzgqb/" target="_blank">轻质隔墙板</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/gsdb/" target="_blank">工商代办</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/suliaodai/" target="_blank">塑料袋</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/ggzz/" target="_blank">广告制作</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/jiaquan/" target="_blank">除甲醛</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/menlian/" target="_blank">门帘</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/baiwuyu/" target="_blank">白乌鱼</a> </li><li class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <a href="https://www.cdcxhl.com/hangye/loutihulan/" target="_blank">楼梯护栏</a> </li> </ul> </div> </div> </div> <div class="carousel-inner linkbg" style="background: #fff"> <div class="container"> <a href="http://www.nzjike.com/" target="_blank">一带一路</a>    <a href="http://www.cdhuace.com/huace.html" target="_blank">成都画册设计公司</a>    <a href="http://www.cdxwcx.cn/tuoguan/neijiang.html" target="_blank">内江托管服务器</a>    <a href="http://www.2518874.com/" target="_blank">王君美油画</a>    <a href="http://www.cdxswst.cn/" target="_blank">成都康明斯发电机组</a>    <a href="https://www.cdxwcx.com/jifang/ershu.html" target="_blank">成都二枢机房</a>    <a href="https://www.cdxwcx.com/400/" target="_blank">成都400电话办理</a>    <a href="https://www.cdxwcx.com/city/chongzhou/" target="_blank">崇州网站建设</a>    <a href="https://www.xwcx.net/" target="_blank">托管服务器</a>    <a href="https://www.cdcxhl.com/tuoguan.html" target="_blank">四川服务器托管</a>    <a href="http://www.zyfdjwx.com/" target="_blank">zyfdjwx.com</a>    <a href="https://www.cdcxhl.com/quanwang.html" target="_blank">全网营销推广</a>    <a href="http://seo.cdkjz.cn/" target="_blank">网络推广平台</a>    <a href="https://www.cdxwcx.com/wangzhan/mbshangcheng.html" target="_blank">B2C电商系统</a>    <a href="http://m.cdcxhl.cn/dingzhi/" target="_blank">成都定制网站建设</a>    <a href="http://mc.scmwjz.com/" target="_blank">成都门窗定制</a>    <a href="http://www.scdanling.com/" target="_blank">丹棱网站建设</a>    <a href="http://www.cdfuwuqi.com/cloud/" target="_blank">云服务器</a>    <a href="https://www.xwcx.net/" target="_blank">成都托管服务器</a>    <a href="https://www.cdcxhl.com/weihu/chengdu.html" target="_blank">成都企业网站维护</a>     </div> </div> <footer> <div class="carousel-inner footjz"> <div class="container"> <i class="icon iconfont zbw"></i> 高品质定制 <i class="icon iconfont"></i> 跨终端自动兼容 <i class="icon iconfont"></i> 节约开发成本 <i class="icon iconfont"></i> 开发周期短 <i class="icon iconfont"></i> 一体化服务 <button type="button" class="btn btn-default btn-lg" onClick="window.location.href='tencent://message/?uin=631063699&Site=&Menu=yes'"> 立即开始2800定制网站建设</button> <button type="button" class="btn btn-default btn-xs" onClick="window.location.href='tencent://message/?uin=631063699&Site=&Menu=yes'"> 2800定制网站建设</button> </div> </div> <div class="carousel-inner bqsy"> <div class="container"> <div class="lxfs"> <h4 class="yutelnone">028-86922220 13518219792</h4> <h4 class="yutelblock"><a href="tel:02886922220">028-86922220</a> <a href="tel:13518219792">13518219792</a></h4> <a class="btn btn-default" href="tencent://message/?uin=532337155&Site=&Menu=yes" role="button">网站建设<span>QQ</span>:532337155</a> <a class="btn btn-default" href="tencent://message/?uin=631063699&Site=&Menu=yes" role="button">营销推广<span>QQ</span>:631063699</a> <a class="btn btn1 btn-default" href="mqqwpa://im/chat?chat_type=wpa&uin=532337155&version=1&src_type=web&web_src=oicqzone.com" role="button">网站制作<span>QQ</span>:532337155</a> <a class="btn btn1 btn-default" href="mqqwpa://im/chat?chat_type=wpa&uin=631063699&version=1&src_type=web&web_src=oicqzone.com" role="button">营销推广<span>QQ</span>:631063699</a> <a class="btn btn-default nonea" href="tencent://message/?uin=1683211881&Site=&Menu=yes" role="button">售后QQ:1683211881</a> <div class="dz">成都快上网专注: <a href="http://www.csdahua.cn/" target="_blank">网站优化</a> <a href="http://www.csdahua.cn/" target="_blank">网络推广</a> <a href="http://www.csdahua.cn/" target="_blank">网站建设</a> <address>地址:成都太升南路288号锦天国际A幢10楼</address> </div> </div> <div class="bzdh dz"><img src="https://www.cdcxhl.com/imges/bottom_logo.png" alt="创新互联"> <p><a href="https://www.cdcxhl.com/menu.html" target="_blank">成都创新互联科技有限公司</a><br> Tel:028-86922220(7x24h)</p></div> </div> </div> </footer> </body> </html> <script> $.getJSON ("../../qtwebpic.txt", function (data) { var jsonContent = { "featured":data } var random = jsonContent.featured[Math.floor(Math.random() * jsonContent.featured.length)]; $(".adpic .adimg").attr("href",random.link) $(".adpic img").attr("src",random.pic); }) </script>