[英]Struts 2 passing data from JSP to action class
我試圖理解別人的Struts 2代碼,我遇到了數據傳遞問題。
我知道在JSP頁面上,如果使用<s:textfield name="something" ... />
標記,struts2將嘗試在動作類中自動調用setSomething(...)
。
我現在看到這種類型的代碼:
<s:textfield name="item.name" ... />
而且我想知道,這是怎么回事.
(點)工作? 我在我的動作類中有一個名為setItem()
的方法,並且在該方法中設置的對象具有setName()
方法,但顯然這不起作用。 點和名稱之間的點是什么意思,如何正確使用它來實例化項目並設置它的名稱?
PS:我的動作類中的setItem()
中設置的item對象有一個空的args
構造函數。
在OGNL .
是點符號 。
item.name
表示getItem().setName();
item.subitem.name
表示getItem().getSubitem.setName();
一個問題可能是缺少空args構造函數, 如此處所述 ,但您說這不是您的情況; 然后我打賭“ Item
失蹤的吸氣劑”。 如果不是,請發布更相關的代碼。
確保getItem().setName()
有公共方法getItem().setName()
也許這些方法不可用或不公開或拼寫錯誤,例如getitem()而不是getItem()。
你的動作應該有setItem(Item item)
Struts2處理name
屬性"item.name"
中的值,如OGNL表達式。 但它不會將評估結果替換為name
屬性,而是替換為value
屬性(如果未設置)。 然后,如果您提交表單,則會創建name
屬性中的參數並通過HTTP請求發送。 Struts2使用params
攔截器來解析參數名稱。 它處理諸如OGNL表達式之類的名稱,並在訪問對象和設置值時調用適當的方法get
和set
。 OGNL表達式中的點代表屬性解析器。 在你的情況下,你應該有getItem()
方法來設置值,這個項應該返回非null
值。 setItem()
沒有使用setItem()
。 可能是你問為什么它沒有被使用,但它可能是另一個問題。
問題已經解決了。 getItem()實際上包含以下代碼:
public Item getItem()
{
System.out.println("Trying to get item: " + item.toString());
return item;
}
這給出了一個nullpointer異常,因為item為null。 只有,這個nullpointerexception不是struts框架所以! 代碼只是繼續(當然失敗了......)。 當我刪除sysout語句時,代碼工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.