2014-02-25 107 views
-2

我在java中使用spring框架。在我的項目中,我使用AJAX調用控制器動作。但我想要這個動作返回我JSON與2(兩個)屬性。狀態和結果。在結果屬性中,我必須在運行時渲染視圖。它如何在春季框架。 這裏是我的方法:作爲json中的值返回視圖

@RequestMapping(value = "get_new_x", method = RequestMethod.GET) 
    @ResponseBody 
    public String GetNewOtpCode(Model model,HttpServletResponse response) { 

      //code . . . . . 
      request.setAttribute("xxx", yyy); 
      request.getSession().setAttribute("zzz", "uyuyt"); 


      String jsonResult = createResultJson(1, renderHtml()); 

     return jsonResult ; 
    } 

    public static String createResultJson(String status, String html) { 
      JSONObject jsonObj = new JSONObject(); 

      jsonObj.append("status", status); 
      jsonObj.append("result", html); 

      return jsonObj.toString(); 
     } 

結果必然是:{"status": "1", "result":"<h1>Rendered html</h1>"}

我ASP.NET MVC開發的。我做了這個代碼在asp.net mvc:

public string RenderRazorViewToString(string viewName, object model) 
{ 
    ViewData.Model = model; 
    using (var sw = new StringWriter()) 
    { 
    var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
    var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
    viewResult.View.Render(viewContext, sw); 
    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
    return sw.GetStringBuilder().ToString(); 
    } 
} 

幫我寫renderHtml()方法。謝謝...

+0

的替代解決方案???沒問題,或者我只是不明白? –

+0

那麼這裏有什麼問題? –

+0

問題。我無法渲染視圖到字符串。也許你不明白我的問題。讓我知道它。我的英語不太好 – AEMLoviji

回答

0

你的json應該看起來像{"status": "1", "result":"<h1>Rendered html</h1>"}。因此,首先創建一個簡單的POJO:

public class Pojo { 
    private String status; 
    private String result; 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getResult() { 
     return result; 
    } 

    public void setResult(String result) { 
     this.result = result; 
    } 
} 

接下來,你應該調整你的控制器方法:

@RequestMapping(value = "get_new_x", method = RequestMethod.GET) 
@ResponseBody 
public Pojo getNewOtpCode() { 
    Pojo pojo = new Pojo(); 
    pojo.setStatus("1"); //change status to int in Pojo class if you would like to see a number literal in your json 
    pojo.setResult(renderHtml()); 
    return pojo; 
} 

你必須傑克遜添加到類路徑。 Spring會自動選取它。 下面是DEPS對Maven:

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.3</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId> 
    <version>1.9.3</version> 
</dependency> 

你可以找到與Spring的視圖resolvern here