導航:首頁 > 編程語言 > strutsjsonel

strutsjsonel

發布時間:2023-05-14 17:32:03

『壹』 struts2 中json跳轉問題

問題描述的不是很清楚
沒太看明白,
可否詳細說說!~

『貳』 struts2中如何獲得json格式數據

後台獲得前台的數據自己可以寫特定的方法截取裡面的屬性,主要用.split(",")和.split(":")前台用jquery的.each方法就可以了

『叄』 struts2裡面怎麼用el表達式取值

struts2中action及其屬性會被談敗包裝成actionContext,在actionContext中有含液顫request、session等各個域,action中的屬性會同步到request中,也就是放到了request作用域埋鄭中,所以el表達式也可以取出。
你也可以用ActionContext.getSession.put(),(不知道記錯沒,你可以試試)手動將某個屬性值放到session中,然後在jsp頁面用el表達式也可以取出來。

『肆』 struts2中為Action指定json返回類型時,如何捕獲異常

通過Struts的聲明式異常來捕獲用戶自定義異常 然後統一的異常處理頁面 現在流版程是這樣權: 運行A頁面,頁面的js上有一個Ajax方法,讀取後台數據,以表格的形式顯示在A頁面 在測試的時候發現,不管在業務邏輯層或者是Action中,加入System.out.println(1/0); 都無法跳轉到統一的一次處理頁面 既然是json數據的。那麼可以try catch處理。 在catch中返回一個識別的字元,在前台判斷,如果是識別的字元串,手動跳轉到錯誤頁面。並且在catch中用log記錄錯誤消息,以便調試。 做個過濾器,如果發現拋出異常,就返回特定json類。可以把異常信息等也包放到這個類里。 然後在頁面獲取JSON時候判斷返回值是不是是不是錯誤信息,再判斷是否需要重新跳轉頁面,或者alert出這個異常信息就可以。 呃,好像不是這個意思。

『伍』 struts2中如何將json格式的數據傳到前端

最簡單的,可以放到域棗祥芹對象中宴局,返回給前凳畢端jsp頁面,使用el表達式獲取

『陸』 JSP在Struts 2中使用JSON Ajax支持


JSON插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。因為JSON插件會負責將Action里的狀態信息序列化成JSON格式的數據,並將該數據返回給客戶端頁面的javaScript。
簡單地說,JSON插件允許我們在JavaScript中非同步調用Action,而且Action不再需要使用視圖資源來顯示該Action里的狀態信息,而是由JSON插件負責將Action里的狀態信息返回給調用頁面——通過這種方式,就可以完成Ajax交互。
Struts2提供了一種可插拔方式來管理插件,安裝Struts2的JSON插件與安裝普通插件並沒有太大的區別,一樣只需要將Struts2插件的JAR文件復制到Web應用的WEB-INF/lib路徑下即可。
安裝JSON插件按如下步驟進行:
(1)登陸
(2)將下載到的jsonplugin-0.7.jar文件復制到Web應用的WEB-INF路徑下,即可完成JSON插件的安裝。
實現Actio邏輯
假設wo,en輸入頁面中包含了三個表單域,這三個表單域對於三個請求參數,因此應該使用Action來封裝這三個請求參數。三個表單域的name分別為field1、field2和field3。
處理該請求的Action類代碼如下:
public class JSONExample
{
//封裝請求參數的三個屬性
private String field1;
private transient String field2;
private String field3;
//封裝處理結果的屬性
private int[] ints = {10, 20};
private Map map = new HashMap();
private String customName = "custom";
//三個請求參數對應的setter和getter方法
public String getField1()
{
return field1;
}
public void setField1(String field1)
{
this.field1 = field1;
}
//此處省略了field1和field2兩個欄位的setter和getter方法
...
//封裝處理結果的屬性的setter和getter方法
public int[] getInts()
{
return ints;
}
public void setInts(int[] ints)
{
this.ints = ints;
}
public Map getMap()
{
return map;
}
public void setMap(Map map)
{
this.map = map;
}
//使用注釋語法來改變該屬性序列化後的屬性名
@JSON(name="newName")
public String getCustomName()
{
return this.customName;
}
public String execute()
{
map.put("name", "yeeku");
return Action.SUCCESS;
}
}
在上面代碼中,宏蔽派使用了JSON注釋,注釋時指定了name域,name域指定Action屬性被序列化成JSON對象的屬性名。除此之外,JSON注釋還支持如下幾個域:
serialize:設置是否序列化該屬性
deserialize:設置是否反序列化該屬性。
format:蔽賀設置用於格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。
配置該Action與並叢配置普通Action存在小小的區別,應該為該Action配置類型為json的Result。而這個Result無需配置任何視圖資源。
配置該Action的struts.xml文件代碼如下:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<package name="example" extends="json-default">
<action name="JSONExample" class="lee.JSONExample">
<result type="json"/>
</action>
</package>
</struts>
在上面配置文件中有兩個值得注意的地方:
第一個地方是配置struts.i18n.encoding常量時,不再是使用GBK編碼,而是UTF-8編碼,這是因為Ajax的POST請求都是以UTF-8的方式進行編碼的。
第二個地方是配置包時,自己的包繼承了json-default包,而不再繼承默認的default包,這是因為只有在該包下才有json類型的Result。

『柒』 java struts2.json.JSONException怎麼解決

Servlet的不寫了,也就是how to use HttpRequest和HttpResponse。主要是在Struts2身上。
以文章所描述的方法似乎總是差了那麼點東西:可以不使用那麼多配置嗎?
於是研究了些時間,可以這么玩:
1)Eclipse引用Struts2的讓兆JSON plug-in和Convertion plug-in。
2)struts.xml這么寫:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<!-- 把它設置為開發模式,發布時要設置為false -->
<constant name="struts.devMode" value="true" />
<!-- 設置在class被修改時是否熱載入,發布時要設置為false -->
<constant name="struts.convention.classes.reload" value="true"/>
<!-- 自動動態方法的調用,使用這個設置後可以這樣調用:action!method -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<悉搭!-- 指定jsp文件所在的目錄地址 -->
<constant name="struts.convention.result.path" value="/WEB-INF/content/" />
<!-- 用於配置包名後綴。默認為action、actions、struts-->
<!-- <constant name="struts.convention.package.locators" value="controller" /> -->
<constant name="struts.convention.action.packages" value="com.my.controller"></constant>
<!-- 用於配置類名後綴,默認為Action,設置後,Struts2隻會去找這種後綴名的類做映射 -->
<constant name="struts.convention.action.suffix" value="Controller"/>
<!-- 設置即使沒有@Action注釋,依然創建Action映射。默認值是false。因為Convention-Plugin是約定優於配置的風格,
可以不通過註解根據預先的定義就能訪問相應Action中的方法 -->
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<!-- 自定義jsp文件命名的分隔符 -->
<constant name="struts.convention.action.name.separator" value="-" /坦陸租>
<!-- 國際化資源文件名稱 -->
<constant name="struts.custom.i18n.resources" value="i18n" />
<!-- 是否自動載入國際化資源文件 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 瀏覽器是否緩存靜態內容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 上傳文件大小限制設置 -->
<constant name="struts.multipart.maxSize" value="-1" />
<!-- 主題,將值設置為simple,即不使用UI模板。這將不會生成額外的html標簽 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 編碼格式 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 設置默認package -->
<constant name="struts.convention.default.parent.package" value="default"></constant>

<package name="default" namespace="/" extends="json-default">
<interceptors>
<interceptor name="cacheInterceptor" class="com.my.interceptor.CacheInterceptor" />
<interceptor-stack name="cacheStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack"></interceptor-ref>
<interceptor-ref name="cacheInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="cacheStack"></default-interceptor-ref>
<default-action-ref name="index" />
<global-results>
<!-- <result name="error">/error.jsp</result> -->
<result name="json" type="json">
<!-- 是否包括父類的屬性輸出,默認true. -->
<!-- <param name="ignoreHierarchy">false</param> -->
<!-- 是否輸出null值的屬性,默認false -->
<!-- <param name="excludeNullProperties">true</param> -->
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
</package>

</struts>

上面有兩個<param/>注釋了,使用方法已經有寫在里頭,如果需要,可以加上或在類中加入@Results。
關鍵點在於把<package />中的 extends設置為json-default,以及在global-results中的這個json result。

3)加入一個UserControl.java

package com.my.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

import com.my.beans.User;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UserController extends ActionSupport {

private User user = new User();
public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

private String json;
public String getJson() {
return json;
}

public void setJson(String json) {
this.json = json;
}

private List<User> users = new ArrayList<User>();
public List<User> getUsers() {
return users;
}

public void setUsers(List<User> users) {
this.users = users;
}

@Override
public String execute() throws Exception {
return SUCCESS;
}

public String loadModel() throws IOException {
System.out.println("json=" + getJson());
System.out.println("user=" + getUser().getUsername());
System.out.println("users=" + getUsers().size());
User userBean = new User();
userBean.setUsername("robin");
users.add(userBean);
this.setJson(JSONObject.fromObject(userBean).toString());
return "json";
}

}

這里沒有什麼特別的東西,就是一些getter/setter,以及一個loadModel() action

4)JS對JSON的提交:

var url = "user!loadModel";
var params = {
"json": "json string",
"user.username" : "zhang",
"users[0].username" : "zhang1",
"users[0].password" : "1",
"users[1].username" : "zhang2",
"users[1].password" : "2",
};
$.post(url, params, function callback(data) {
console.log(data)
});

這里是重點。
可以看到這段JS里的params有:json/user.username/users[X].username
其中:
a) json
對應的就是上頁java中的getJson/setJson,這個東東列出來是可以用於在頁面與伺服器之間傳遞JSON字元串用的。如果你需要在action中輸出或提交json的字元串,它有很大作用,直接到位。但是缺點是要自己去將對象轉化為json string以及json string轉化為對象。

b) user.username
這樣的寫法可以在後台java中直接轉化成了對象。user.username中的user就是java中的user object。

c) users[0].username
這可以直接轉化成後台java中的List<user>對象users。

可以看出,Struts2是可以完成將json直接轉化成java object的。不過這樣的寫法,不是好的。因為這個JS的JSON只能稱作是一個字元串拼接,不是一個JSON object

還有一種方法,使用ModelDriven:

package com.my.controller;

import com.my.beans.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@SuppressWarnings("serial")
public class UserModelController extends ActionSupport implements
ModelDriven<Object> {

private User user = new User();

@Override
public Object getModel() {
return user;
}

@Override
public String execute() throws Exception {
return SUCCESS;
}

public String load() {
return "json";
}

}

使用ModelDriven,可以JS直接提交JSON了:

var url = "user-model!load";
var params = {
"username": "zhang1",
"password": "123456"
};
$.post(url, params, function callback(data) {
console.log(data)
});

這個params才是真正的JSON object,它會被ModelDriven直接轉成user model。
但是:它似乎不能提交List object。至今寫文時也沒有找到在ModelDriven中可以提交JSON array to List的方法。
如果需要提交復雜的JSON到伺服器,如果你用的是Struts,使用第一種方法的json的getter/setter吧。

『捌』 struts2註解 怎麼樣返回json

返回的對象是實體類得對象的話,先把重寫實體類的toString方法:
public
String
toString(){
String
json
=
"{屬性1:'%s',屬性2:'%s',屬性3:'%s',屬性4:'%s'}";
//如果是int類型就把單引號去掉,把%s改成%d,double就改成%f
return
String.forMat(json,屬性1,屬性2,屬性3,屬性4,);
}
這是實體類裡面的
在Action裡面使用out.print()列印輸出對象的行了,返回return
null;

『玖』 在struts2+ajax使用json傳遞數據的工程中,返回的數據為null

這是struts常用配置,表示返回的json對象,加了之後data就能獲取到這個對象

『拾』 struts2 怎樣讀取json數據

一.認識JSON

JSON是一種輕量級、基於文本、與語言無關的數據交換格式,可以用文本格式的形式來存儲或表示結構化的數據。

二.POST請求與Content-Type: application/json

常用的HTTP請求方法有GET, POST, PUT, DELETE等。在提交POST請求時,請求數據放在消息體(Body)中,請求數據的格式及編碼方式用Content-Type來指定。如我們常用的表單<form>提交,其Content-Type默認為application/x-www-form-urlencoded,提交的數據按照key1=val1&key2=val2進行編碼,伺服器端也能很容易地解析K-V值。

JSON的出現,讓交換的數據不再僅限於簡單的K-V結構,而可以有更加復雜的層級,特別適合於RESTful介面。在發送請求時,指定Content-Type為application/json,即可使用JSON字元串作為請求的數據。而在伺服器端接收到該請求後,將按照JSON字元串對請求數據進行處理。

三.Struts2接收JSON請求

在Struts2的Action中提取Content-Type為application/x-www-form-urlencoded的POST參數,我們非常熟悉:在Action中定義屬性及其getter, setter方法,接收到請求時,默認會將與屬性同名的參數值賦予該屬性。

但是對Content-Type為application/json的請求數據,Struts2默認無法解析。因為請求的JSON數據需從輸入流中讀取出來,無法直接從ServletRequest的請求參數中解析。很容易想到,要讀取JSON請求數據,最直接的方式就是從輸入流讀取。而同時,Struts2的strus2-json-plugin也提供了有關的攔截器,對JSON請求數據進行解析。下面將對兩種方案進行分析:

1.從輸入流中讀取JSON請求數據,以下是在Action中實現的一個讀取輸入流數據的方法

  • 解析得到JSON對象後,遍歷JSON對象,取出K-V,通過反射的V設置給予K相同的屬性

  • 開發者可根據自己的需求進行選擇:從輸入流直接讀取JSON請求數據,或使用struts2-json-plugin對JSON請求數據進行處理。

    閱讀全文

    與strutsjsonel相關的資料

    熱點內容
    確認全血細胞減少看哪些數據 瀏覽:265
    文件有哪些要求 瀏覽:484
    cad打開時會出現兩個文件 瀏覽:65
    什麼是轉基因網站 瀏覽:48
    手柄設備有問題代碼43 瀏覽:921
    怎麼他么怎麼又網路了 瀏覽:649
    java會出現內存泄露么 瀏覽:617
    蘋果4s鎖屏後怎麼還顯示歌曲 瀏覽:207
    鴻蒙系統文件管理哪些可以刪除 瀏覽:550
    ubuntuqt創建工程沒有配置文件 瀏覽:126
    網站登錄變成其他網站怎麼處理 瀏覽:202
    ug數控編程學校有哪些 瀏覽:203
    java圖片上傳顯示 瀏覽:402
    ppt的文件名後綴 瀏覽:902
    ug編程軟體下載到哪個盤 瀏覽:359
    炫酷字體APP下載的文件在哪裡 瀏覽:668
    廊坊哪裡有少兒編程機構 瀏覽:312
    cad新文件能找回來嗎 瀏覽:951
    導出手機qq文件到u盤 瀏覽:456
    電腦如何打開ppt文件怎麼打開方式 瀏覽:782

    友情鏈接