2012-03-30 45 views
1

那麼目前我有這樣的:RichFaces的4文件上傳清晰和明確的所有按鈕

<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; 
} 

任何想法?

乾杯

UPDATE

RichFaces的4.1.0最終 JSF鑽嘴魚科2.1.6 的Tomcat 7

回答

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; 
    } 
} 
+0

這是非常有益的感謝。還有一個問題,我怎麼知道誰是'clearFile()'函數的調用者?如果是** Clear All **按鈕或** Clear **鏈接? – BRabbit27 2012-04-03 15:29:08

+0

我不知道你爲什麼需要它,對不起,我沒有一個適當的答案。然而,在你的Javascript函數中,你可以通過調用「window.event.srcElement」來訪問觸發事件的元素。只需爲ClearAll按鈕「window.event.srcElement.tagName」返回「SPAN」,對於Delete鏈接,它返回「A」。這意味着您可以在JavaScript部分中正確識別組件。因此,在識別組件後,嘗試使用將其傳遞到服務器。 – prageeth 2012-04-05 12:18:30

0

添加 「onclear」 屬性您<豐富:文件上傳/ >組件和呼叫a < a4j:jsFunction />並將文件名傳遞給它,如下所示。

<rich:fileUpload onclear="clearFunc(event.memo.entry.fileName);" ..../> 

你< A4J:jsFunction />應該是如下。

<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);} 
+0

如若A4J:jsFunction是文件上傳標籤裏面?像''我怎麼知道點擊的按鈕是**全部清除**還是**清除** ?? – BRabbit27 2012-03-30 17:54:08

+0

我目前使用的RichFaces 4.1.0和theres沒有''所以我使用''是嗎? – BRabbit27 2012-03-30 18:02:43

+0

也嘗試過這個線程https://community.jboss.org/message/727544#727544建議,但我不能得到文件名,任何想法? – BRabbit27 2012-04-02 16:26:01