簡體   English   中英

Struts 2將數據從JSP傳遞給動作類

[英]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表達式之類的名稱,並在訪問對象和設置值時調用適當的方法getset 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.

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