0

the follow code is working when i save "name" property as simple string data, but now I want save the "name" as JSON data, such as {"en":"White Rice","cn":"白米","th":"ข้าวขาว"}, and display the name value according to locale language. How can I do?

<s:iterator value="categorylist">
    <li class="mn_menu-active">
        <a href="#"> 
              <span><s:property value="name" /></span>

              <div class="clear"></div>
              </a>
              <ul>
                <s:iterator value="children">
                    <li>
                        <a href="#">
                         <span class="ms_txt"><s:property value="name" /></span>
                         <div class="clear"></div>
                         </a>
                     </li>

                </s:iterator>
              </ul>

          </li>
</s:iterator>

1 Answers1

0

Hear I implement a class to handle it.

package com.tsd.json;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.ValueStack;

import java.util.Locale;

import net.sf.json.JSONObject;

public class LocaleHandler {

public static String Locale(String name)
{
    ValueStack stack = ActionContext.getContext().getValueStack();


    String result="";
    HttpServletRequest request = ServletActionContext.getRequest();
    Locale locale = (java.util.Locale)request.getSession().getAttribute("WW_TRANS_I18N_LOCALE");
    String jsonData =(String)stack.findValue(name);
    JSONObject json=JSONObject.fromObject(jsonData); 
     if(locale ==null)
     {
         HttpServletResponse response=ServletActionContext.getResponse();
         locale=response.getLocale();
     }
     if (locale instanceof Locale)
     {
         result= json.getString(locale.getLanguage()+"_"+locale.getCountry());
     }
    return result;
}

}

and modify the jsp as follow:

 <s:iterator value="categorylist">
              <li class="mn_menu-active">
                  <a href="#"> 
                     <span>
                       <%=LocaleHandler.Locale("name") %>
                     </span>

                     <div class="clear"></div>
                  </a>
                  <ul>
                    <s:iterator value="children">
                        <li>
                            <a href="#">
                             <span class="ms_txt"> <%=LocaleHandler.Locale("name") %></span>
                             <div class="clear"></div>
                             </a>
                         </li>

                    </s:iterator>
                  </ul>

              </li>
          </s:iterator>