import java.io.IOException;
import javax.portlet.ActionResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.bind.annotation.ActionMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;
import sample.code.listing.domain.Book;
import sample.code.listing.service.BookService;
import sample.code.listing.utils.LongNumberEditor;
import util.JsonMapper;
@Controller
@RequestMapping("VIEW")
public class ViewBookController {
static Logger logger = Logger.getLogger(ViewBookController.class);
@Autowired
@Qualifier("myBookService")
private BookService bookService;
final JsonMapperjsonMapper = new JsonMapper (Book.class);
final LongNumberEditor longNumberEditor = new LongNumberEditor();
@ModelAttribute("book")
public Book getBook(@RequestParam Long isbnNumber) {
System.out.println("getBook:" + isbnNumber);
return bookService.getBook(isbnNumber);
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Long.class, longNumberEditor);
binder.setDisallowedFields(new String[] { "isbnNumber" });
}
@ResourceMapping("jsonOutput")
public String jsonOutput(ResourceRequest request) throws IOException {
Long isbnNumber = longNumberEditor.getValue(request.getParameter("isbnNumber"));
Book book = getBook(isbnNumber);
request.setAttribute("book", book);
return "viewBookForm2";
}
@RenderMapping(params = "myaction=viewBookForm")
public String showViewBookForm() {
return "viewBookForm";
}
@ResourceMapping
public ModelAndView toJson(@ModelAttribute("book") Book book, ResourceRequest request, ResourceResponse response) {
response.setContentType("text/plain");
try {
response.getWriter().println(jsonMapper.toJson(book));
} catch (IOException e) {
logger.error("exception serving resource: {}" + e.getMessage());
}
return null;
}
@ResourceMapping("jsonView1")
public ModelAndView toJson1(@ModelAttribute("book") Book book, ResourceRequest request, ResourceResponse response) {
response.setContentType("text/plain");
try {
response.getPortletOutputStream().write(jsonMapper.toJson(book).getBytes());
} catch (IOException e) {
logger.error("exception serving resource: {}" + e.getMessage());
}
return null;
}
@ResourceMapping("jsonView2")
public void toJson2(ResourceRequest request, ResourceResponse response) throws IOException {
response.setContentType("text/plain");
try {
Long isbnNumber = longNumberEditor.getValue(request.getParameter("isbnNumber"));
response.getPortletOutputStream().write(jsonMapper.toJson(getBook(isbnNumber)).getBytes());
} catch (IOException e) {
logger.error("exception serving resource: {}" + e.getMessage());
}
}
@ActionMapping(params = "myaction=viewBook")
public void viewBook(@ModelAttribute("book") Book book, ActionResponse response) {
//--this is required. the getBook method is not invoked but the @RequestParam
//--is still evaluated
response.setRenderParameter("isbnNumber", book.getIsbnNumber().toString());
response.setRenderParameter("myaction", "viewBookForm");
}
}
viewBookForm.jsp
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page contentType="text/html" isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<portlet:actionURL var="viewBookActionUrl">
<portlet:param name="myaction" value="viewBook" />
</portlet:actionURL>
<portlet:renderURL var="homeUrl">
<portlet:param name="myaction" value="books" />
</portlet:renderURL>
<portlet:resourceURL var="default1" escapeXml="false" id="default1">
</portlet:resourceURL>
<portlet:resourceURL var="jsonView1" escapeXml="false" id="jsonView">
</portlet:resourceURL>
<portlet:resourceURL var="jsonView2" escapeXml="false" id="jsonView">
</portlet:resourceURL>
<portlet:resourceURL var="jsonOutput" escapeXml="false" id="jsonOutput">
</portlet:resourceURL>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.js" ></script>
<script type="text/javascript">
function showJson(url) {
$.get(url, function(response) {
$("#ajaxContent").html(response);
var json = eval('(' + response + ')');
alert(json.name);
});
}
function showJsonMarkup(url) {
$.get(url, function(response) {
$("#ajaxMarkup").html(response);
//alert(${"#ajaxMarkup"}.html())
});
}
</script>
<div id="ajaxContent">
</div>
<div id="ajaxMarkup">
</div>
<form:form name="viewBookForm" commandName="book" method="post"
action="${viewBookActionUrl}">
<table>
<tr align="left">
<a href="${homeUrl}">Home</a>
</tr>
</table>
<table>
<tr>
<td>Name:<font style="color: #C11B17;"></font></td>
<td>${book.name}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
<tr>
<td>Author:<font style="color: #C11B17;"></font></td>
<td>${book.author}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
<tr>
<td>ISBN:<font style="color: #C11B17;"></font></td>
<td>${book.isbnNumber}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
</table>
</form:form>
<br></br>
<a href="${default1}">json data</a><br/>
<a href="${jsonView1}">json data 1</a><br/>
<a href="${jsonView2}">json data 2</a><br/>
<a href="${jsonOutput}">json markup</a><br/>
<a onclick="showJson('${jsonView1}'); return false" href="javascript:void(0)">json data ajax 1</a><br/>
<a onclick="showJson('${jsonView2}'); return false" href="javascript:void(0)">json data ajax 2</a><br/>
<a onclick="showJsonMarkup('${jsonOutput}'); return false" href="javascript:void(0)">json markup ajax</a><br/>
<br></br>
<form:form name="viewBookForm" commandName="book" method="post"
action="${homeUrl}">
<input type="submit" value="Home" name="Home" />
</form:form>
viewBookForm2.jsp
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page contentType="text/html" isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<table>
<tr>
<td>Name:<font style="color: #C11B17;"></font></td>
<td>${book.name}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
<tr>
<td>Author:<font style="color: #C11B17;"></font></td>
<td>${book.author}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
<tr>
<td>ISBN:<font style="color: #C11B17;"></font></td>
<td>${book.isbnNumber}</td>
<td><font style="color: #C11B17;"></font></td>
</tr>
</table>
This comment has been removed by a blog administrator.
ReplyDelete