Как я могу настроить свой пользовательский тип результата, используя плагин констеций в результате -- plugins поле с участием struts2 поле с участием conventions пол Связанный проблема

How can I configure my custom result type using conventions plugin in result


3
vote

проблема

русский

Я создал пользовательский класс результата для сериализации данных JSON к XML. Я хочу настроить этот класс результатов в качестве типа результата для некоторых конкретных действий через подключаемые конвенции. Но это дает ошибки во время начального контейнера. Мой код и ошибка приведены ниже.

Мой пользовательский класс результата:

 <код> package actions;  import example.*; import java.io.PrintWriter;  import org.apache.struts2.ServletActionContext;  import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.ValueStack; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;   public class JSONResult implements Result {  public static final String DEFAULT_PARAM = "classAlias"; String classAlias;  public String getClassAlias() {     return classAlias; }  public void setClassAlias(String classAlias) {     this.classAlias = classAlias; }  public void execute(ActionInvocation invocation) throws Exception {     System.out.println("executing JSONResult execute()");     ServletActionContext.getResponse().setContentType("text/plain");     PrintWriter responseStream = ServletActionContext.getResponse().getWriter();     /* Retrieve Objects to Serialize to JSON from ValueStack */     ValueStack valueStack = invocation.getStack();     Object jsonModel = valueStack.findValue("jsonModel");      XStream xstream = new XStream(new JsonHierarchicalStreamDriver());     /*      * If there's no parameter passed in, just write the objects under a      * default name.      */     if (classAlias == null) {         classAlias = "object";     }     xstream.registerConverter(new XStreamHashConverter());     xstream.alias(classAlias, jsonModel.getClass());      /* Write to the response stream */     System.out.println("xstream.toXML(jsonModel) == "+xstream.toXML(jsonModel));     responseStream.println(xstream.toXML(jsonModel)); } }   

Урок моих действий с аннотациями следует:

 <код> package actions;  import com.opensymphony.xwork2.ActionSupport; import java.util.HashMap; import java.util.Map; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.interceptor.ParameterAware;   @ParentPackage("actions") @Namespace("/actions") public class ZipDataSupplier extends ActionSupport implements ParameterAware {  private Map parameters;  private Object jsonModel;   public Map getParameters()  {     return this.parameters;  }  public void setParameters(Map parameters)  {    this.parameters=parameters;  } public Object getJsonModel() {    return this.jsonModel; } public void setJsonModel(Object jsonModel) {    this.jsonModel = jsonModel; }  @Action(value="/getZipData",results={@Result(name="success",location="ajaxCall", **type="actions.JSONResult")**}) public String getZipData() {    System.out.println("inside getZipData ... ...");    Map map =  getParameters();    System.out.println("parameter map = "+map);    String htmlIds = ((String[])map.get("htmlIds"))[0];    System.out.println("htmlIds = "+htmlIds);    String jsonIds = ((String[])map.get("jsonIds"))[0];    System.out.println("jsonIds = "+jsonIds);    ZipData zipData = new ZipData();    zipData.getCity().put("Dulles", "Dulles");    zipData.getCity().put("New York", "New York");    setJsonModel(zipData);    return SUCCESS;  } }  class ZipData { private String zipCode = "20101"; private String stateCode = "VA"; private String stateName = "Virginia";  private HashMap<String,String> city=new HashMap<String, String>();  //private JSONObject city = null;//JSONArray.fromObject( getCityMap());  /**  * @return the zipCode  */ public String getZipCode() {     return zipCode; }  /**  * @param zipCode the zipCode to set  */ public void setZipCode(String zipCode) {     this.zipCode = zipCode; }  /**  * @return the stateCode  */ public String getStateCode() {     return stateCode; }  /**  * @param stateCode the stateCode to set  */ public void setStateCode(String stateCode) {     this.stateCode = stateCode; }  /**  * @return the stateName  */ public String getStateName() {     return stateName; }  /**  * @param stateName the stateName to set  */ public void setStateName(String stateName) {     this.stateName = stateName; }  /**  * @return the city  / public JSONObject getCity() {     this.city = JSONObject.fromObject( getCityMap());     return this.city; }  /**  * @param city the city to set  / public void setCity(JSONObject city) {     this.city = city; }  /**  * @return the cityMap  */ public HashMap<String, String> getCity() {     //city.put("Dulles", "Dulles");     //city.put("ABC", "ABC");     return city; }  /**  * @param city the city to set  */ public void setCity(HashMap<String, String> city) {     this.city = city; }    /**  * @return the city  / public String getCity() {     return city; }  /**  * @param city the city to set  / public void setCity(String city) {     this.city = city; }  /**  * @return the city  / public Map<String, String> getCity() {     return city; }  /**  * @param city the city to set  / public void setCity(Map<String, String> city) {     this.city = city; }  * */ }   

Struts.xml Файл следует:

 <код> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>     <constant name="struts.enable.DynamicMethodInvocation" value="false" />     <constant name="struts.devMode" value="true"/>     <constant name="struts.configuration.xml.reload" value="true"/> </struts>   
Английский оригинал

I have created custom result class to serialize json data to xml. I want to configure this result class as a result type for some specific actions via conventions plug ins. But it is giving errors at the time of starting container. My code and error is given below.

My custom Result class:

package actions;  import example.*; import java.io.PrintWriter;  import org.apache.struts2.ServletActionContext;  import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.ValueStack; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;   public class JSONResult implements Result {  public static final String DEFAULT_PARAM = "classAlias"; String classAlias;  public String getClassAlias() {     return classAlias; }  public void setClassAlias(String classAlias) {     this.classAlias = classAlias; }  public void execute(ActionInvocation invocation) throws Exception {     System.out.println("executing JSONResult execute()");     ServletActionContext.getResponse().setContentType("text/plain");     PrintWriter responseStream = ServletActionContext.getResponse().getWriter();     /* Retrieve Objects to Serialize to JSON from ValueStack */     ValueStack valueStack = invocation.getStack();     Object jsonModel = valueStack.findValue("jsonModel");      XStream xstream = new XStream(new JsonHierarchicalStreamDriver());     /*      * If there's no parameter passed in, just write the objects under a      * default name.      */     if (classAlias == null) {         classAlias = "object";     }     xstream.registerConverter(new XStreamHashConverter());     xstream.alias(classAlias, jsonModel.getClass());      /* Write to the response stream */     System.out.println("xstream.toXML(jsonModel) == "+xstream.toXML(jsonModel));     responseStream.println(xstream.toXML(jsonModel)); } } 

my Actions class with annotations follows:

package actions;  import com.opensymphony.xwork2.ActionSupport; import java.util.HashMap; import java.util.Map; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.interceptor.ParameterAware;   @ParentPackage("actions") @Namespace("/actions") public class ZipDataSupplier extends ActionSupport implements ParameterAware {  private Map parameters;  private Object jsonModel;   public Map getParameters()  {     return this.parameters;  }  public void setParameters(Map parameters)  {    this.parameters=parameters;  } public Object getJsonModel() {    return this.jsonModel; } public void setJsonModel(Object jsonModel) {    this.jsonModel = jsonModel; }  @Action(value="/getZipData",results={@Result(name="success",location="ajaxCall", **type="actions.JSONResult")**}) public String getZipData() {    System.out.println("inside getZipData ... ...");    Map map =  getParameters();    System.out.println("parameter map = "+map);    String htmlIds = ((String[])map.get("htmlIds"))[0];    System.out.println("htmlIds = "+htmlIds);    String jsonIds = ((String[])map.get("jsonIds"))[0];    System.out.println("jsonIds = "+jsonIds);    ZipData zipData = new ZipData();    zipData.getCity().put("Dulles", "Dulles");    zipData.getCity().put("New York", "New York");    setJsonModel(zipData);    return SUCCESS;  } }  class ZipData { private String zipCode = "20101"; private String stateCode = "VA"; private String stateName = "Virginia";  private HashMap<String,String> city=new HashMap<String, String>();  //private JSONObject city = null;//JSONArray.fromObject( getCityMap());  /**  * @return the zipCode  */ public String getZipCode() {     return zipCode; }  /**  * @param zipCode the zipCode to set  */ public void setZipCode(String zipCode) {     this.zipCode = zipCode; }  /**  * @return the stateCode  */ public String getStateCode() {     return stateCode; }  /**  * @param stateCode the stateCode to set  */ public void setStateCode(String stateCode) {     this.stateCode = stateCode; }  /**  * @return the stateName  */ public String getStateName() {     return stateName; }  /**  * @param stateName the stateName to set  */ public void setStateName(String stateName) {     this.stateName = stateName; }  /**  * @return the city  / public JSONObject getCity() {     this.city = JSONObject.fromObject( getCityMap());     return this.city; }  /**  * @param city the city to set  / public void setCity(JSONObject city) {     this.city = city; }  /**  * @return the cityMap  */ public HashMap<String, String> getCity() {     //city.put("Dulles", "Dulles");     //city.put("ABC", "ABC");     return city; }  /**  * @param city the city to set  */ public void setCity(HashMap<String, String> city) {     this.city = city; }    /**  * @return the city  / public String getCity() {     return city; }  /**  * @param city the city to set  / public void setCity(String city) {     this.city = city; }  /**  * @return the city  / public Map<String, String> getCity() {     return city; }  /**  * @param city the city to set  / public void setCity(Map<String, String> city) {     this.city = city; }  * */ } 

Struts.XML file follows:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>     <constant name="struts.enable.DynamicMethodInvocation" value="false" />     <constant name="struts.devMode" value="true"/>     <constant name="struts.configuration.xml.reload" value="true"/> </struts> 
</div
        
 
 

Список ответов

0
 
vote
vote
Лучший ответ
 

Насколько я понимаю, вы хотите сериализовать данные JSON к XML, используя пользовательский класс, прежде чем где-то отображается.

Так что вы можете сделать, написать действие для сериализации и дайте действие страницы результата для основного действия, которая возвращает формат JSON, чтобы JSON также доступен для действия результата. Если вы хотите JSON как String Object, использование может преобразовать любой объект, список и т. Д. Для json String с использованием GSON API .

Если это не ваше решение, комментируйте. Мы можем двигаться Фермура.

 

As far as I understand, you want to serialize json data to xml using custom class before you rendered somewhere.

So what you can do is, write an action for serialization and give the action as the result page for the main action that returns json format so that the json is also available to the result action. If you want json as string object, use can convert any object, list etc. to json string using GSON API.

If this is not your solution, do comment. We can move furthur.

</div
 
 
 
 

Связанный проблема

7  При разработке программной платформы, какие ключевые элементы составляют успешную сменутую архитектуру? [закрыто]  ( When designing a software platform what are the key elements that make up a suc ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос должен быть больше Фокусированный . В настоя...

0  WordPress - плагин S2member: членство на фиксированную дату  ( Wordpress s2member plugin membership to fixed date ) 
Я интегрирую S2member в качестве плагина членства на существующий сайт WordPress. Легко генерировать кнопку PayPal, чтобы пользователь подписался на экзэмп, ...

4  Не могу установить плагин GWT разработчика для IE 7 или 8  ( Cant install gwt developer plugin for ie 7 or 8 ) 
Я хочу установить плагин GWT разработчика для IE (я уже установил его на Chrome и Firefox без какой-либо проблемы). Когда я хочу установить его для IE7 (на об...

0  Нужна помощь в настройке плагина jQuery Cycle  ( Need help customizing jquery cycle plugin ) 
Хорошо, я люблю плагин jQuery Cycle для слайд-шоу. Я недавно получил много запросов на полноэкранные веб-сайты слайд-шоу. Я был неудачным в редактировании ц...

1  Документ просмотра плагина браузера  ( Document viewer browser plugin ) 
Я разрабатываю плагин по перекрестному браузеру для просмотра документов (.pdf, .doc, .xls, .mht, .tiff, .dwg). Это должен быть плагин, а не расширение. Все, ...

3  GWT Plugin разработчика для проблемы установки IE  ( Gwt developer plugin for ie installation problem ) 
Я использую окно 7 (32-битную) коробку с IE8, и у меня проблемы Установка плагина GWT разработчика для IE. Я получаю следующее сообщение об ошибке: «Не удал...

3  Как обновлять плагины Rails, установленные через Git, но в SVN REPO?  ( How to update rails plugins installed through git but in a svn repo ) 
Приложение My Rails находится в репозитории SVN, но несколько плагинов устанавливаются через Git, а затем добавляли в SVN REPO. Как я могу обновить эти плагин...

0  Как приостановить этот слайдер jQuery?  ( How to pause this jquery slider ) 
Я борюсь с этим навсегда, и он заставляет меня вытащить мои волосы! http://webdesignsalemoregon.com/westernmennoniteschool/ У меня есть ползунок на этой...

0  Составление поддержки InterBase в Qt  ( Compiling interbase support in qt ) 
Я следовал инструкциям на http: //doc.qt. nokia.com/stable/sql-driver.html#qibase для составления поддержки InterBase в QT и убедился, что все мои библиотек...

18  Maven, Прогуард и Ассамблевные проблемы  ( Maven proguard and assembly issues ) 
Я пытаюсь заставить Maven работать с Proguard. Что я хочу достичь, это следующее: . Выполните proguard над моими исходными файлами и производить комплект...

0  FancyTree: Настройте мою собственную навигацию на клавиатуре  ( Fancytree configure my own keyboard navigation ) 
Я хотел бы знать, есть ли способ расширить навигацию, которая предлагает FanceTree, например, заставить <код> delete , <код> cut , <код> copy / код> или <код>...

7  Загрузите сборку без блокировки файла и сохраните правильный контекст привязки  ( Load an assembly without locking file and keep the right binding context ) 
Я прокладываю против грозной загадки. Вот моя ситуация: Я создаю приложение с плагином Framework. Есть класс базового плагина, который все плагины должны пр...

0  Workflow Git для проекта с открытым источником и проприетарной (частной) частью [закрыта]  ( Git workflow for a project with open source and proprietary private part ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос должен быть больше Фокусированный . В настоя...

-1  Как использовать SBT, чтобы создать проект плагина IDEA?  ( How to use sbt to create an idea plugin project ) 
Мы можем легко использовать Intellij-идею, чтобы легко импортировать нормальный проект SBT, но я пытаюсь написать проект плагина IDEW со SCALA, и я хочу испол...

0  Сложность с XSS (Scrip-сайт Scripting) Ошибка на моем журнале  ( Difficulty with xss cross site scripting error on my journal site ) 
Я ранее опубликовал вопрос, ищущего тикер для моего журнала веб-сайт и удалось кодировать то, что работает просто, как и ожидалось. Ну, я нашел код, который д...

Связанный проблема

7  При разработке программной платформы, какие ключевые элементы составляют успешную сменутую архитектуру? [закрыто] 
0  WordPress - плагин S2member: членство на фиксированную дату 
4  Не могу установить плагин GWT разработчика для IE 7 или 8 
0  Нужна помощь в настройке плагина jQuery Cycle 
1  Документ просмотра плагина браузера 
3  GWT Plugin разработчика для проблемы установки IE 
3  Как обновлять плагины Rails, установленные через Git, но в SVN REPO? 
0  Как приостановить этот слайдер jQuery? 
0  Составление поддержки InterBase в Qt 
18  Maven, Прогуард и Ассамблевные проблемы 
0  FancyTree: Настройте мою собственную навигацию на клавиатуре 
7  Загрузите сборку без блокировки файла и сохраните правильный контекст привязки 
0  Workflow Git для проекта с открытым источником и проприетарной (частной) частью [закрыта] 
-1  Как использовать SBT, чтобы создать проект плагина IDEA? 
0  Сложность с XSS (Scrip-сайт Scripting) Ошибка на моем журнале