2012-09-03 40 views
1

在我的jsp頁面中,我有一個表單(在struts2中),我嘗試在提交表單後使用隱藏標記將ArrayList數據的大小分配給Vector testVector,但仍然將testVector的大小等於0。是否有可能在struts2的隱藏標籤中爲名稱調用setter?

<s:hidden name="testVector.size" value="%{data.size}" /> 

我在我的Action類中爲數據和testVector創建了setter和getters。

private Vector<String> testVector = new Vector<String>(); 
private ArrayList<String> data = new ArrayList<String>(); 
private String testName; // a field for testing the form. 

// getters and setters of testVector and data 

我認爲,這應該工作,因爲向量有一個公共的setter的setSize(INT大小)。對於其他領域的「測試名」這是很好提交..所以我我有語法問題?

非常感謝。

+0

這是不行的,因爲你的隱藏字段將等同於'gettestVector()的setSize();'而不是情況下'testVector'是字符串列表,而且你的'testVector'是字符串類型所以我不確定你的意思是你有getter ans setter setSize(int size)'?我可能有誤讀的問題,你可以展示與getter和setter方法Action類代碼也 –

+0

testVector是類型爲向量的集合,所以它已經預先定義的公共方法是的setSize。所以我推測,getTestVector()的setSize()將被自動當我寫的名字=「testVector.size」之稱。但testVector的大小沒有改變。這就是我的意思。謝謝。 – Angelina

回答

1

您不應該使用矢量。請注意,由於安全原因,OGNL在處理請求時與處理JSP時不一樣,但它太強大了。你應該設置bean屬性,集合,數組和來自請求的內置類型(忽略類型轉換器)。

從這種情況下的請求,它認爲是試圖將值放入向量。我認爲它會創建一個新的字符串將其放入Vector中,然後嘗試設置字符串的大小(由於該方法不存在而不起作用)。

爲了證實這一點,我想你說的話和日誌狀態:

WARNING: Error setting expression 'testVector.size' with value '[Ljava.lang.String;@5c7b2d2f' 
ognl.OgnlException: Error converting given String values for Collection. [ognl.NoSuchPropertyException: java.lang.String.size] 

如果你想要這個行爲,你將需要創建第二個方法,例如:setSize()的動作中,然後去修改矢量大小。我不認爲這是一件很好的事情要揭露外部世界,如果有人多次呼籲你的行動通過了一個龐大的數字?

+0

+1我想試試它,但從來沒有開始我的IDE :) –

相關問題