2013-08-30 63 views
0

我是使用struts2的文件上傳和我的動作類包含吸氣劑3周私人的Fileds和setterStruts2的文件上傳錯誤

private File myFile; 
private String myFileFileName; 
private String myFileContentType; 

我有一些douts澄清

  1. 我們只是路過該文件作爲參數,並將其綁定到MYFILE,那麼如何將應用程序獲得的文件名和內容類型?每當我使用myFileVariableName +「FileName」(如果文件變量是myFile,那麼文件名變量是myFileFileName,如果文件是xxx,那麼文件名是xxxFileName),我得到輸出,如果我做任何改變以這種格式(即,myFileVariableName +「FileName」),它變爲空。使用這種格式是強制性的嗎?我可以將其更改爲我想要的任何名稱嗎?如果是這樣,那麼怎麼樣?

  2. 獲取內容類型,我應該使用JST 「的contentType」 或myfileVariableName + 「的contentType」。這是否也是強制性的?

  3. 我想,如果我使用一個單獨的bean來存儲我的請求變量,所有的參數被綁定到該豆變量。但是,在文件上傳只有文件變量即MYFILE在這個例子只能得到和在bean設置的情況下。 fileFileName和contentType爲空。如果我直接在動作類中聲明這些變量,那麼我會得到這些值,但是每當我使用一個單獨的bean時,只有File變量可以獲取並設置,而其他兩個變量都是null。爲什麼?

  4. 如果我使用模型驅動,在相同的情況下發生的事情,我只能獲得文件變量和其他兩個變量是空。爲什麼?

我只在struts.xml中擴展了「struts-default」,沒有單獨的文件上傳配置,因爲它不會在我的問題中顯示任何效果。對於文件上傳

回答

1

Action類,聲明文件變量來存儲用戶上傳的文件,兩個字符串變量來存儲文件名和內容類型。 的文件上傳攔截自動注入上傳的文件細節通過一套「X」的ContentType(),並設置「X」文件名(),請確保該方法名是正確拼寫。

文件上傳功能取決於「fileUpload Interceptor」, 確保它包含在Action的堆棧中。幸運的是, 默認堆棧已經包含了「fileUpload Interceptor」。

字段userImageContentTypeuserImageFileName是可選的。如果提供這些字段的setter方法struts2的將設置數據。這只是爲了獲得一些上傳文件的額外信息。如果您提供內容類型和文件名字符串,請遵循命名標準。名稱應該是ContentTypeFileName

例如,如果在操作文件中的文件屬性是私有文件 UploadedFile的,內容類型將是uploadedFileContentType和 文件名uploadedFileFileName。

得到的Struts 2設定的動作:將值分配給一個變量,而不是屬性值。 例如,

public class SetTagAction extends ActionSupport{ 

private String msg; 

public String setMsg(String msg) { 
    this.msg = msg; 
} 
<s:set var="msg" value="%{'this is a message'}" /> 

許多Struts 2的開發者認爲組標籤VAR =」 msg」中將值經由setMsg()方法分配給相關聯的動作類。

這是錯誤的,set標籤不會調用setMsg()方法,它只會將「value」賦值給名爲「msg」的變量,而不是動作的屬性值。

+0

但'X'contentType()也與jst contentType()一起工作爲什麼?你能回答第4個第5個問題嗎? – Shameer

+0

@Shameer回答更新 –

+0

@Shameer struts2 auto append獲取/設置爲變量映射 –