目前我有这个:
<rich:fileUpload addLabel="Agregar" clearAllLabel="Quitar todos"
clearLabel="Quitar" deleteLabel="Quitar"
doneLabel="Completado" uploadLabel="Subir archivos"
fileUploadListener="#{uploadBean.doUpload}"
acceptedTypes="txt, csv"
noDuplicate="true">
<a4j:ajax event="uploadcomplete" render="validationButton"/>
<a4j:ajax event="clear" listener="#{uploadBean.doClearFilesList}"
render="validationButton"/>
</rich:fileUpload>
在支持bean上,我有一个上传文件的列表。当我点击Clear/Clear all
按钮时,会触发事件clear
,当用户点击doClearFilesList
按钮时,方法Clear All
(只清除上传的文件列表)就完美了,但如果用户点击Clear
按钮它应该只删除与清除文件对应的列表中的项目。
如何从UploadBean.doClearFilesList
方法中删除列表中的单个文件?应该是这样的:
public void doClearFilesList(){
files.clear(); //when CLEAR ALL is clicked
files.remove(oneFile); //when CLEAR is clicked
validationButtonRendered = false;
}
有什么想法吗?
干杯
更新
RichFaces 4.1.0 Final JSF Mojarra 2.1.6 Tomcat 7
答案 0 :(得分:2)
我不清楚您未能运行https://community.jboss.org/message/727544#727544
中描述的样本但是,我希望以下内容适用于您,这与上面的示例非常相似。
网页:强>
<h:head>
<script>
function clear(event) {
var files = new Array();
var data = event.rf.data;
for (var i in data) {
files[i] = data[i].name;
}
clearFunc(files);
}
</script>
</h:head>
<body>
<h:form>
<rich:fileUpload onclear="clear(event);"/>
<a4j:jsFunction name="clearFunc" action="#{del.clearFile}" ajaxSingle="true">
<a4j:param name="fName" assignTo="#{del.fileNames}" />
</a4j:jsFunction>
</h:form>
</body>
<强>类别:强>
public class Del {
String[] fileNames;
public void clearFile() {
for(String name : fileNames) {
System.out.println(">>" + name);
//Do file removing part here
}
}
public String[] getFileNames() {
return fileNames;
}
public void setFileNames(String[] fileNames) {
this.fileNames = fileNames;
}
}
答案 1 :(得分:0)
将“onclear”属性添加到&lt; rich:fileUpload /&gt;组件并调用&lt; a4j:jsFunction /&gt;并将文件名传递给它,如下所示。
<rich:fileUpload onclear="clearFunc(event.memo.entry.fileName);" ..../>
你的&lt; a4j:jsFunction /&gt;应该如下。
<a4j:jsFunction name="clearFunc" actionListener="#{uploadBean.clearFile}" ajaxSingle="true">
<a4j:actionparam name="fName" />
</a4j:jsFunction>
在侦听器方法中,您可以访问文件名,如下所示。
public void clearFile(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String fileName = context.getExternalContext().getRequestParameterMap().get("fName").toString();
System.out.println("fileName = " + fileName);}