`
dragon0929
  • 浏览: 77868 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JSF upload& play audio

阅读更多

JSF Upload Audio

 

JSP:

 

<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>

<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich" %>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j" %>
<h:panelGroup id="audios">
    <script type="text/javascript" src="<h:outputText value="#{request.contextPath}/js/flowplayer.3.1.2.min.js"/>"></script>
    <script type="text/javascript">
        function controlAudio(index) {
            if (jQuery("#play" + index).hasClass("play")) {
                play(index);
            }
            else {
                stop(index);
            }
        }
        function play(index) {
            jQuery("#play" + index).removeClass("play").addClass("stop");
            try{
                $f("audio" + index).play();
            }catch(err)
               {
               var txt="There was an error on this page.\n\n"
               txt+="Error description: " + err.description + "\n\n"
               txt+="Click OK to continue.\n\n";
               throw err;
            }
        }

        function stop(index) {
            jQuery("#play" + index).removeClass("stop").addClass("play");
            try{
                $f("audio" + index).stop();
            }catch(err)
               {
               var txt="There was an error on this page.\n\n"
               txt+="Error description: " + err.description + "\n\n"
               txt+="Click OK to continue.\n\n";
            }
        }
     </script>
   
     <style type="text/css">
        .play {
            display: block;
            float: left;
            width: 46px;
            height: 20px;
            padding: 0;
            text-decoration: none;
            background: url(../img/btn/play.gif) no-repeat 0 0;
        }

        .stop {
            display: block;
            float: left;
            width: 46px;
            height: 20px;
            padding: 0;
            text-decoration: none;
            background: url(../img/btn/stop.gif) no-repeat 0 0;
        }
    </style>
     <rich:dataTable id="audioTable" value="#{artistManageBean.profileAudios}" var="audio" rowKeyVar="rowNo" rowClasses="odd, even"
                     style="width:60%;text-align:left;" rendered="#{not empty artistManageBean.profileAudios}">
       
         <rich:column style="text-align:center;width:50%;">
              <f:facet name="header">
                  <h:outputText value="Description"/>
              </f:facet>
              <h:outputText value="#{audio.descriptionDesc}"/>
         </rich:column>
         <rich:column style="text-align:center;width:10%;">
              <f:facet name="header">
                  <h:outputText value="Duration"/>
              </f:facet>
              <h:outputText value="#{audio.durationNum}"/>
         </rich:column>
         <rich:column>
              <f:facet name="header">
                  <h:outputText value="audition"/>
              </f:facet>
              <h:panelGroup>
                   <a href="javascript:controlAudio(<h:outputText value='#{rowNo + 1}'/>);" id="play<h:outputText value='#{rowNo + 1}'/>" class="play">
                    <img src="<h:outputText value='#{request.contextPath}'/>/img/clear.gif" width="46" height="20" alt="" title=""/>
                 </a>
                 <div id="audio<h:outputText value='#{rowNo + 1}'/>" style="margin: 0pt; padding: 0pt; width: 10px; height: 5px;"></div>                
                   <script type="text/javascript">
                    $f("audio<h:outputText value='#{rowNo + 1}'/>", "<h:outputText value='#{request.contextPath}/swf/flowplayer-3.1.2.swf'/>", {
                          plugins: {
                              controls: {
                                  all: false,
                                  backgroundColor: '#ffffff',
                                  fontColor: '#ffffff',
                                  timeFontColor: '#ffffff'
                              }
                          },
                          clip: {
                              url: "<h:outputText value='#{request.contextPath}/audio?filename=/#{audio.name.fullPath}'/>",
                              autoPlay: false,
                              autoBuffering: false
                          }
                      });
                </script>

              </h:panelGroup>
            
         </rich:column>
         <rich:column>
              <f:facet name="header">
                  <h:outputText value="Operation"/>
              </f:facet>
              <h:panelGroup>
                   <a4j:commandLink id="edit" value="Edit" immediate="true"
                      reRender="artist:audios"
                      action="#{artistManageBean.doEditAudio}"/>&nbsp;|&nbsp;
                    <a4j:commandLink id="del" value="Delete" immediate="true"
                     reRender="artist:audios"
                     action="#{artistManageBean.doRemoveAudio}"/>
                   
              </h:panelGroup>
            
         </rich:column>

        </rich:dataTable>
   
       
       <a4j:outputPanel id="uploadAudio">
          <a4j:commandButton reRender="uploadAudio" rendered="#{artistManageBean.profileAudio == null}"
                value="Upload Audio" action="#{artistManageBean.doCreateAudio}"/>
        <h:panelGrid  columns="2" rendered="#{artistManageBean.profileAudio != null}">
             <h:outputText value="#{artistManageBean.profileAudio.name != null ? 'Replace Current Audio' : 'Upload Audio'}"/>
             <h:panelGroup id="audio">
                    <rich:fileUpload id="audioUpload" acceptedTypes="mp3, wav, wma" required="true"
                             immediate="true" listWidth="280" listHeight="60" autoclear="false"
                             maxFilesQuantity="1" addControlLabel="Upload" immediateUpload="true"
                             requiredMessage="Audio is required."
                             fileUploadListener="#{artistManageBean.audioUploadListener}">
                    </rich:fileUpload>
                   <rich:message for="videoUpload" errorClass="error_single"/>
                   <h:outputText value="Audio types allowed: MP3, WAV, WMA" />
               </h:panelGroup>
            
            <h:outputLabel value="Description: " />
            <h:inputText value="#{artistManageBean.profileAudio.descriptionDesc}" />
            <h:outputLabel value="Duration: " />
            <h:selectOneListbox id="audioDuration" style="width:50px;" size="1"
                            value="#{artistManageBean.profileAudio.durationNum}">
                        <f:selectItem itemValue="1" itemLabel="1"/>
                        <f:selectItem itemValue="2" itemLabel="2"/>
                        <f:selectItem itemValue="3" itemLabel="3"/>
                        <f:selectItem itemValue="4" itemLabel="4"/>
                        <f:selectItem itemValue="5" itemLabel="5"/>
            </h:selectOneListbox>
               <h:outputLabel value=" " />
                  <h:panelGroup>
                     <a4j:commandButton value="Upload" reRender="artist:audios" action="#{artistManageBean.doSaveAudio}"/>
                     &nbsp;&nbsp;
                     <a4j:commandButton value="Cancel" reRender="artist:audios" action="#{artistManageBean.doCancelAudio}"/>
                </h:panelGroup>
        </h:panelGrid>
       </a4j:outputPanel>

</h:panelGroup>

Background Bean:

 

    private boolean isEditAudio = false;
    private MediaVO<ProfileAudio> profileAudioVO;
    private ProfileAudio profileAudio;

 

public void audioUploadListener(UploadEvent event) {
        InputStream fileInputStream = null;
        try {
            UploadItem upload = event.getUploadItem();
            if (upload.isTempFile()) {
                removeOldAudio();
                fileInputStream = new FileInputStream(upload.getFile());
                AudioHelperWrapper wrapper = new AudioHelperWrapper();
                wrapper.initialize();
                wrapper.download(upload.getFileName(), fileInputStream);
                profileAudio.setName(wrapper.getMediaName());

                MessageUtil.addGlobalInfoMessage("Audio is uploaded successfully.");
            }
        } catch (Exception e) {
            MessageUtil.addGlobalErrorMessage("Cannot upload audio.");
            log.error("Error to close uploaded audio input stream.", e);
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (Exception e) {

                }
            }
        }
    }
   
    private void removeOldAudio() {
        if (profileAudio.getName() != null) {
            AudioHelper.removeFile(profileAudio.getName().getFullPath());
            profileAudio.setName(null);
        }
    }
     
    public List<ProfileAudio> getProfileAudios() {
        try {
            if (profileAudioVO == null) {
                profileAudioVO = new MediaVO<ProfileAudio>();
                if (getMemberProfile().getId() != null) {
                    try {
                        profileAudioVO.getCurrent().addAll(profileAudioManager.getByMemberProfileID(getMemberProfile().getId()));
                         if (!profileAudioVO.hasCurrent()) {
                             profileAudio = new ProfileAudio();
                         }
                    } catch (FinderException e) {
                        e.printStackTrace();
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            MessageUtil.addGlobalErrorMessage("Error to pload profile audios.");
        }
        return profileAudioVO.getCurrent();
    }
     
    public String doCreateAudio() {
        profileAudio = new ProfileAudio();
        isEditAudio= false;
        return ActionForward.NONE;
    }
       
    public String doEditAudio() {
        isEditAudio = true;
        ProfileAudio audio = (ProfileAudio) requestMap().get("audio");
       
        if (audio!= null) {
            profileAudio = audio;
        } else {
            profileAudio = new ProfileAudio();
        }
         return ActionForward.NONE;
     }
     
     public String doRemoveAudio() {
        ProfileAudio audio = (ProfileAudio) requestMap().get("audio");
        if (audio != null) {
            profileAudioVO.addRemoved(audio);
            MessageUtil.addGlobalInfoMessage("Audio will be removed with saving artist profile.");
        } else {
            MessageUtil.addGlobalErrorMessage("Can't remove audio: it's not found.");
        }
        return ActionForward.NONE;
    }
     
    public String doSaveAudio() {
        if (profileAudio != null) {
            final MediaName audioName = profileAudio.getName();
            if (audioName == null) {
                MessageUtil.addGlobalErrorMessage("Please, upload audio file.");
            } else {
                ProfileAudio temp = new ProfileAudio();
                temp.setName(audioName);
                temp.setDescriptionDesc(profileAudio.getDescriptionDesc());
                temp.setDurationNum(profileAudio.getDurationNum());
                temp.setMemberProfileID(memberProfile.getId());
                if (profileAudio.getId() != null) {
                    temp.setId(profileAudio.getId());
                    profileAudioVO.addChanged(temp);
                } else if (!isEditAudio){
                    profileAudioVO.addCreated(temp);
                }
                profileAudio = null;
            }
        }
        isEditAudio = false;
        return ActionForward.NONE;
    }
   
    public String doCancelAudio() {
       
        if (!isEditVideo && profileAudio.getName() != null) {
            VideoHelper.removeFile(profileAudio.getName().getFullPath());
        }
        profileAudio = null;
        isEditAudio = false;
       
        return ActionForward.NONE;
    }

    public ProfileAudio getProfileAudio() {
        return profileAudio;
    }

    public void setProfileAudio(ProfileAudio profileAudio) {
        this.profileAudio = profileAudio;
    }

 

Batch Update code:

 

if (profileAudioVO.hasCreated()) profileAudioManager.createBulk(profileAudioVO.getCreated());
            if (profileAudioVO.hasChanged()) profileAudioManager.changeBulk(profileAudioVO.getChanged());
            if (profileAudioVO.hasRemoved()) profileAudioManager.removeBulk(profileAudioVO.getRemoved());


MediaVO.java

 

public class MediaVO<_ProfileMedia extends EntityDomainType> implements Serializable {

    private List<_ProfileMedia> current = null;
    private List<_ProfileMedia> created = null;
    private List<_ProfileMedia> changed = null;
    private List<_ProfileMedia> removed = null;

    public List<_ProfileMedia> getCurrent() {
        if (current == null) {
            current = newListInstance();
        }
        return current;
    }

    public List<_ProfileMedia> getCreated() {
        if (created == null) {
            created = newListInstance();
        }
        return created;
    }

    public List<_ProfileMedia> getChanged() {
        if (changed == null) {
            changed = newListInstance();
        }
        return changed;
    }

    public List<_ProfileMedia> getRemoved() {
        if (removed == null) {
            removed = newListInstance();
        }
        return removed;
    }

    public boolean hasCurrent() {
        return (current != null && current.size() > 0);
    }

    public boolean hasCreated() {
        return (created != null && created.size() > 0);
    }

    public boolean hasChanged() {
        return (changed != null && changed.size() > 0);
    }

    public boolean hasRemoved() {
        return (removed != null && removed.size() > 0);
    }

    public void addCreated(_ProfileMedia item) {
        getCreated().add(item);
        getCurrent().add(item);
    }

    public void addChanged(_ProfileMedia item) {
        if (!hasChanged() || !getChanged().contains(item)) {
            getChanged().add(item);
        }
    }

    public void addRemoved(_ProfileMedia item) {
        if (hasCreated() && getCreated().contains(item)) {
            getCreated().remove(item);
        } else {
            getRemoved().add(item);
        }
        if (hasChanged()) {
            getChanged().remove(item);
        }
        getCurrent().remove(item);
       
    }

    public void reset() {
        current = null;
        created = null;
        changed = null;
        removed = null;
    }

    private List<_ProfileMedia> newListInstance() {
        return new ArrayList<_ProfileMedia>();
    }
}

 

分享到:
评论

相关推荐

    [JSF] JSF & HTML5 高级程序设计 (英文版)

    Pro JSF and HTML5 shows you how to leverage the full potential of JavaServer Faces (JSF) and HTML5. This book is for Java developers who aspire to build sophisticated, enterprise-grade web experiences...

    [JBoss] JSF & Facelets & JBoss Seam 核心技术 (英文版)

    [TipTec Development] JSF & Facelets & JBoss Seam 核心技术 (英文版) [TipTec Development] Essential JSF, Facelets & JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] TipTec ...

    jsf2.0上传组件(servlet3.0)

    在本文中,我们将深入探讨如何使用JavaServer Faces (JSF) 2.0与Servlet 3.0结合实现文件上传功能。JSF是Java平台上的一种Web应用程序开发框架,而Servlet 3.0则是用于处理HTTP请求的核心Java API,两者结合可以提供...

    JSF & Primes Faces from Scratch

    ### JavaServer Faces (JSF) 与 PrimeFaces 入门详解 #### 一、MVC2 模型 **JavaServer Faces**(简称 JSF)是 Java 平台的一个标准框架,用于构建企业级 Web 应用程序。它遵循 MVC(Model-View-Controller)设计...

    JSF实践项目(生活吧)

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。JSF的核心概念是组件模型,它允许开发者通过拖放组件来构建用户界面,然后将这些组件与后端业务逻辑相连接。这个"JSF实践项目...

    jsf实例jsf实例 JSF学习 JSF jar包 JSF

    jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF

    [JBoss] JSF 2 APIs & JBoss Seam 基础教程 (英文版)

    [Apress] JSF 2 APIs & JBoss Seam 基础教程 (英文版) [Apress] Beginning JSF 2 APIs and JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] Apress [出版日期] 2009年05月25日 ...

    jsf第一个例子 jsf架包 jsf实例

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它为开发人员提供了一种模型-视图-控制器(MVC)架构,简化了前端和后端之间的交互。JSF提供了组件库,使得创建动态、交互式的...

    JSF中文教程jsf

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它简化了开发人员创建交互式、数据驱动的Web界面的过程。JSF提供了一个组件模型,允许开发者通过拖放组件的方式来构建用户界面...

    《JSF_实战》非常好的JSF学习书

    《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...

    JSF入门+JSF web实战+JSF2

    JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来构建用户界面,简化了开发过程,并且与Java EE平台无缝集成。本系列资料包括《JSF...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    JavaServer Faces (JSF) 是一个用于构建用户界面的Java Web框架,它简化了创建和维护Web应用程序的复杂性。JSF的核心理念是提供一种组件化的编程模型,将UI元素与业务逻辑分离,使得开发者可以专注于应用的逻辑部分...

    jsf分页 jsf分页 jsf分页

    在JavaServer Faces (JSF)框架中,分页是一种常用的技术,用于处理大量数据时提供更好的用户体验。当数据集过大,一次性加载所有记录到页面上会导致性能下降且用户界面响应变慢。通过分页,我们可以将数据分成多个...

    JSF上传 JSF大文件上传 JSF上传代码 JSF上传源代码

    JSF(JavaServer Faces)是Java平台上用于构建用户界面的Web框架,尤其在处理表单和数据交互方面表现强大。本项目聚焦于JSF的文件上传功能,特别是针对大文件的上传,允许用户上传最大可达1.99GB的文件。在实际应用...

    JSF包,jsf包,JSF包,jsf包

    **JSF(JavaServer Faces)** 是一种Java平台上的Web应用程序开发框架,它提供了一种组件化和事件驱动的方式来创建用户界面。JSF的核心概念包括组件、事件、渲染器和生命周期,这些元素共同构建了一个强大的MVC...

    core jsf 1.2 jsf 核心

    **JSF 1.2核心详解** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的组件模型框架,特别适用于Web应用程序的开发。JSF 1.2是该框架的一个重要版本,它在JSF 1.1的基础上进行了一系列的改进和增强,...

    JSF文件下载实现

    **JSF 文件下载实现** 在JavaServer Faces (JSF)框架中,实现文件下载功能是一项常见的需求。在本文中,我们将深入探讨如何使用JSF来实现在Web应用程序中下载文件的功能。主要涉及的关键知识点包括: 1. **JSF上...

    jsf视频jsf视频0

    jsf 视频 java faces jsf 视频 java faces jsf 视频 java faces

    jsf-api.jar和jsf-impl.jar

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它提供了一种组件化和事件驱动的方式来创建交互式的Web界面。JSF API 和 JSF Impl 是JSF框架的核心组成部分。 **jsf-api.jar**...

Global site tag (gtag.js) - Google Analytics