簡體   English   中英

Struts2文件上傳錯誤

[英]Struts2 file upload errors

我正在使用struts2文件上傳,並且我的操作類包含3個帶有getter和setter的私有文件

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

我有一些問題需要澄清

  1. 我們僅傳遞文件作為參數並將其綁定到myFile ,那么應用程序如何獲取文件名和內容類型?

  2. 每當我使用myFileVariableName +“ FileName”(如果文件變量是myFile,文件名變量是myFileFileName,如果文件是xxx,那么文件名是xxxFileName),如果我對此格式進行了任何更改(即, ,myFileVariableName +“ FileName”),它為null。 是否必須使用此格式? 我可以將其更改為我想要的任何名稱嗎? 如果是這樣,那又如何?

  3. 要獲取內容類型,我應該使用jst“ contentType”或myfileVariableName +“ contentType”。 它也是強制性的嗎?

  4. 我假設,如果我使用單獨的bean存儲我的請求變量,則所有參數都將綁定到該bean變量。 但是在文件上傳的情況下,僅文件變量,即本示例中的myFile僅在bean中獲取和設置。 fileFileName和contentType為null。 如果直接在操作類中聲明這些變量,則將獲得這些值,但是每當使用單獨的bean時,只有File變量可以獲取和設置,而其他兩個則為null。 為什么?

  5. 如果使用ModelDriven,則發生相同的情況,我只能獲取File變量,而其他兩個變量為null。 為什么?

我只是在struts.xml中擴展了“ struts-default”,並且沒有用於文件上傳的單獨配置,因為它在我的問題中沒有顯示任何效果。

對於文件上傳的操作類 ,聲明一個File變量來存儲用戶上傳的文件,兩個String變量來存儲文件名和內容類型。 fileUpload攔截器將通過設置' X'ContentType()和設置' X'FileName() 自動注入上傳的文件詳細信息 ,確保方法名稱拼寫正確。

文件上傳功能取決於“ fileUpload Interceptor”,請確保將其包含在操作的堆棧中。 幸運的是,默認堆棧已包含“ fileUpload Interceptor”。

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

例如,如果操作文件中的文件屬性是私有文件上載的文件,則內容類型將為上載的文件內容類型,文件名為上載的文件名稱。

在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開發人員認為, set標記var =” msg”將通過setMsg()方法將值分配給關聯的動作類。

這是錯誤的,set標記將不會調用setMsg()方法,它將僅將“值”分配給名為“ msg”的變量,而不是操作的屬性值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM