#javascript #json #jsp #struts2
#javascript #json #jsp #struts2
Вопрос:
У меня возникли проблемы с получением результатов JSON, работающих с Struts 2.2.1.1.
Есть ли у кого-нибудь простой рабочий пример, который возвращает результат JSON в JSP с использованием Struts 2.2.1.1 и готов к запуску в Eclipse как динамический веб-проект?
Пожалуйста, включите struts.xml , класс действий и JSP-код. Также обратите внимание на зависимости. Спасибо.
Ответ №1:
Вот как создать простой пример JSON с использованием плагина Struts 2 jQuery.
- Перейдите к витрине плагина jQuery Struts2
- Перейдите к формам Ajax > Набор кнопок / флажков
- Просмотрите код для набора кнопок, который был заполнен из результата AJAX JSON. Этот код я выбрал для создания простого примера.
- Создать динамический веб-проект в Eclipse
- Создайте пакет Java и назовите его test.
- Загрузите исходный код плагина jQuery Struts 2 для демонстрации (struts2-jquery-showcase-x.x.x-sources.jar ) и извлеките файл JAR.
- Импортируйте
Echo.java
,JsonSample.java
иListValue.java
в тестовый пакет и переместите код в пакет с быстрым исправлением. - Измените аннотацию класса на
Echo.java
иJsonSample.java
на @ParentPackage(value = "test")
- В дополнение к стандартным библиотекам Struts 2, убедитесь, чтоstruts2-json-plugin-x.x.x.jar, struts2-jquery-plugin-x.x.x.jar , и struts2-convention-plugin-x.x.x.jar файлы находятся в вашем пути к классу.
-
Создайте
struts.xml
файл и добавьте следующий XML:<struts> <constant name="struts.devMode" value="true" /> <constant name="struts.convention.action.packages" value="test" /> <package name="test" extends="json-default” namespace="/"> </package> </struts>
-
Создайте файл index.jsp и вставьте следующий код:
<s:form id="form2" action="echo" theme="xhtml"> <s:url id="remoteurl" action="jsonsample" /> <sj:checkboxlist href="%{remoteurl}" id=“remoteCheckboxlist” name="echo" list="languageList" label="Language" /> <sj:submit targets="formResult" value="AJAX Submit" indicator=“indicator” button="true"/> </s:form>
-
Запустите пример.
Комментарии:
1. Я выполнил все вышеуказанные шаги .. но я получил это исключение: «Status 404 — / testSamples / index.jsp» .. можете ли вы, пожалуйста, мне помочь?
2. @johnnieb — Ваша ссылка мертва.
Ответ №2:
Должен видеть: struts2-x.x.x-all.zip /apps/struts2-showcase-2.2.1.war
Комментарии:
1. На витрине нет примеров. Примеры ссылок упакованы как проекты Maven. Мы — муравьиная мастерская, и я не могу заставить файлы правильно запускаться в Eclipse. Я бы предпочел иметь ZIP-архив, готовый к импорту в Eclipse.
Ответ №3:
Заставить Json работать с struts2 очень просто.
Для этого,
-
вам нужно добавить плагин struts-json *(jsonplugin-0.32.jar )* к пути к классу.
-
Ваш struts.xml файл должен расширять json-default
<package name="base" namespace="/" extends="json-default">
-
Результат вашего действия должен быть таким.
<result type="json"><param name="root">jsonData</param></result>
-
Внутри класса action объявите json как
private LinkedHashMap<K, V> jsonData new LinkedHashMap<k, V>();
а затем добавьте список результатов в json следующим образом
jsonData.put("result", anyList or object);
Это все, что нам нужно сделать. Затем мы можем получить доступ к результату с помощью javascript.
Ответ №4:
Попробуйте это, поможет вам в Struts 2.0.14 с jsonplugin-0.32.jar .
struts.xml:
<struts>
<package name="example" extends="json-default">
<action name="HelloWorld" class="example.HelloWorld" >
<result type="json" />
</action>
<action name="HelloWorld1" class="example.HelloWorld" >
<result name="success" >example/HelloWorld.jsp</result>
</action>
</package>
</struts>
класс действия Helloworld.java:
package prabhakar;
import glb.DB;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Prabhakar
*/
public class HelloWorld {
private List<StateMaster> stateList= new ArrayList<StateMaster>();
private List<RegnMaster> regnList= new ArrayList<StateMaster>();
private Integer stateId;
public Integer getStateId()
{
return this.stateId;
}
public void setStateId(Integer stateId)
{
this.stateId=stateId;
}
public List<StateMaster> getStateList() {
return stateList;
}
public void setStateList(List<StateMaster> stateList) {
this.stateList = stateList;
}
public void setRegnList(List<RegnMaster> regnList) {
this.regnList = regnList;
}
public List<RegnMaster> getRegnList() {
return regnList;
}
public String execute() throws Exception {
stateList=DB.getStateData()//
if(stateId !=null)
{
regnList=DB.getRegnByStateId(stateId);
}
//setMessage(getText(MESSAGE));
return "success";
}
/**
* Provide default valuie for Message property.
*/
}
Вы можете напрямую вызвать HelloWorld.action для просмотра данных JSON или же вы можете привязать данные JSON к элементу формы ниже.
Страница JSP HelloWorld.jsp:
/*
Prabhakar
*/
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<script>
<%@include file="../js/jquery-1.7.1.min.js"%>
</script>
<html>
<!-- JavaScript Plugins -->
<script>
function getLoad(){
var stateId = $('#state').val();
$.getJSON('HelloWorld.action', {'stateId': stateId},
function(data) {
var divisionList = (data.regnList);
var options = $("#regn");
options.find('option')
.remove()
.end();
options.append($("<option />").val("-1").text("--Select--"));
$.each(divisionList, function() {
options.append($("<option />").val(this.regnId).text(this.regnName));
});
}
);}
</script>
<!-- jQuery-UI Dependent Scripts -->
<body>
State List <s:select name="stateId" list="stateList" id="state" listKey="stateId" onchange="getLoad()" listValue="stateName" headerKey="0" headerValue="--select--" />
Regn List <s:select name="regnId" list="regnList" listKey="regnId" id="regn" listValue="regnName" headerKey="0" headerValue="--select--" />
</body>
</html>
Удачного кодирования 🙂