- 浏览: 77868 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Durian:
乱七八糟的
Smart GWT Sample (Form) -
jelver:
怎么不能编辑回复呢,郁闷,
不过我在直接修改html没有用,只 ...
GWT and Smart GWT -
jelver:
非常感谢您的这段提示:
另外sc目录下有一个文件init ...
GWT and Smart GWT -
ysihaoy:
是的,我今天也遇到了这个问题,很麻烦。本想搞搞恶作剧,可是go ...
设置gmail邮件服务器,改变发件人
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}"/> |
<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}"/>
<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>();
}
}
相关推荐
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...
[TipTec Development] JSF & Facelets & JBoss Seam 核心技术 (英文版) [TipTec Development] Essential JSF, Facelets & JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] TipTec ...
在本文中,我们将深入探讨如何使用JavaServer Faces (JSF) 2.0与Servlet 3.0结合实现文件上传功能。JSF是Java平台上的一种Web应用程序开发框架,而Servlet 3.0则是用于处理HTTP请求的核心Java API,两者结合可以提供...
### JavaServer Faces (JSF) 与 PrimeFaces 入门详解 #### 一、MVC2 模型 **JavaServer Faces**(简称 JSF)是 Java 平台的一个标准框架,用于构建企业级 Web 应用程序。它遵循 MVC(Model-View-Controller)设计...
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。JSF的核心概念是组件模型,它允许开发者通过拖放组件来构建用户界面,然后将这些组件与后端业务逻辑相连接。这个"JSF实践项目...
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
[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(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它为开发人员提供了一种模型-视图-控制器(MVC)架构,简化了前端和后端之间的交互。JSF提供了组件库,使得创建动态、交互式的...
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它简化了开发人员创建交互式、数据驱动的Web界面的过程。JSF提供了一个组件模型,允许开发者通过拖放组件的方式来构建用户界面...
《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...
JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...
JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来构建用户界面,简化了开发过程,并且与Java EE平台无缝集成。本系列资料包括《JSF...
JavaServer Faces (JSF) 是一个用于构建用户界面的Java Web框架,它简化了创建和维护Web应用程序的复杂性。JSF的核心理念是提供一种组件化的编程模型,将UI元素与业务逻辑分离,使得开发者可以专注于应用的逻辑部分...
在JavaServer Faces (JSF)框架中,分页是一种常用的技术,用于处理大量数据时提供更好的用户体验。当数据集过大,一次性加载所有记录到页面上会导致性能下降且用户界面响应变慢。通过分页,我们可以将数据分成多个...
JSF(JavaServer Faces)是Java平台上用于构建用户界面的Web框架,尤其在处理表单和数据交互方面表现强大。本项目聚焦于JSF的文件上传功能,特别是针对大文件的上传,允许用户上传最大可达1.99GB的文件。在实际应用...
**JSF(JavaServer Faces)** 是一种Java平台上的Web应用程序开发框架,它提供了一种组件化和事件驱动的方式来创建用户界面。JSF的核心概念包括组件、事件、渲染器和生命周期,这些元素共同构建了一个强大的MVC...
**JSF 1.2核心详解** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的组件模型框架,特别适用于Web应用程序的开发。JSF 1.2是该框架的一个重要版本,它在JSF 1.1的基础上进行了一系列的改进和增强,...
**JSF 文件下载实现** 在JavaServer Faces (JSF)框架中,实现文件下载功能是一项常见的需求。在本文中,我们将深入探讨如何使用JSF来实现在Web应用程序中下载文件的功能。主要涉及的关键知识点包括: 1. **JSF上...
jsf 视频 java faces jsf 视频 java faces jsf 视频 java faces
**JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它提供了一种组件化和事件驱动的方式来创建交互式的Web界面。JSF API 和 JSF Impl 是JSF框架的核心组成部分。 **jsf-api.jar**...