Tag Archives: Struts2

Struts2 + JSON plugin

簡單記錄 struts2 + json plugin 的 AJAX 寫法

1. 在 struts2 的 xml 檔加入以下 json 設定

<package name=”json” namespace=”/json” extends=”json-default”>
<action name=”getCustomer” class=”com.amjet.web.action.JsonAction” method=”getCustomer”>
<result name=”success” type=”json”>
<param name=”root”>response</param>
</result>
</action>
</package>

2. json action 內放一個 property response, 例如

private Map<String,Object> response;

加上 getter, setter, 回傳 ajax response

3. json action method

public String getCustomer() {

response=new HashMap<String,Object>();

response.put(“info”,<customer info>);
return SUCCESS;
}

4. 頁面接取 json 資料

function doQuery() {
$.ajax({
url: ‘<s:url action=”getCustomer” namespace=”/json”/>’,
type: ‘POST’,
dataType: ‘json’,
data: { id_no: id_no },
success: function(data,status,xhr) {

***  your handler here ***

}
});
}

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Struts2 tips

當 struts2 的 action code 拋出 exception 時,有一個頁面提示系統的使用者是相當方便的,一方面讓使用者了解目前發生了異常的情形,也可以在頁面上置入錯誤碼讓問題回報及解決更加有效率。本文主要參考這個 網址

首先在 struts.xml 要有以下設定

<global-results>
<result name=”Exception”>/Exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception=”java.lang.Exception” result=”Exception”/>
</global-exception-mappings>

在 jsp 可以顯示 ‘目前系統發生異常狀況,錯誤代碼為 xxxxxx ,請向系統管理人員回報以便儘快處理’ 。

另外在 jsp 的 OGNL 語法字串比較部份有一個小提示

<s:if test=”%{#request.err_code.equals(‘A’)”>

這個寫法 err_code 是字串,’A’ 是一個 character,所以即使 action err_code 傳來 “A”,比對的結果仍然是 false

<s:if test=’%{#request.err_code.equals(“A”)’>

以上的寫法比對的結果才會是 true

 

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

ognl.MethodFailedException: Method “setQty” failed for object com.amjet.sales.model.Order

最近寫一個 struts2 action 傳回 json 資料,測試時發生上面的錯誤。原因是頁面的 jquery 元件透過 post method 送出 “order.qty” 的參數,struts2 的 interceptor 在收到參數後想要設定 action 內 order 物件的 qty property,事實上我不需要 struts2 作 parse 參數及設定物件的動作,參數我想在 action 內用 request.getParameter() 自己接取處理。以下的 action 設定範例可以讓 interceptor 忽略開頭為 order 的參數,由於 struts2 預設也會忽略開頭為 dojo,struts 的參數,我們也一併保留:

<action name=”updateSell” method=”jsonUpdate”
class=”com.amjet.sales.web.action.SellAction”>
<interceptor-ref name=”defaultStack”>
<param name=”params.excludeParams”>^order\..*,dojo\..*,^struts\..*</param>
</interceptor-ref>

<result type=”json”>
<param name=”target”>jquery</param>
</result>
</action>

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 3.00 out of 5)
Loading...

Struts2 org.apache.struts2.ServletActionContext API 的 method 無法使用

想要寫個上傳檔案的程式,照慣例用 ServletActionContext 的 getServletContext().getRealPath() 來取得實際路徑,但是這個列在 API 的 method 卻沒有出現在 eclipse 的 清單中,網路上也找不到解決方法,最後發現是少了 servlet API 的 package。這個 package 如果是用 tomcat 的話,已經 bundle 了,不同 tomcat 版本在不同位置:

<tomcat 5.x>/common/lib/servlet-api.jar

<tomcat 6.x>/lib/servlet-api.jar

把 servlet-api.jar 複製到 web application 的 WEB-INF/lib 目錄下,再重新 build  project  即可。

註1:這個 jar 檔只有開發時需要,deploy 時因為 tomcat 已經 bundle 了,可以不要

註2:如果是用 myeclipse,IDE 在建新 web application project 時會自動處理好,不會有這個問題,付了費幫忙省下一些時間是一定要的啦

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...