[code language=”Ruby”]
class PostsController < ApplicationController
# GET /posts
# GET /posts.json
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @posts }
end
end
# GET /posts/1
# GET /posts/1.json
def show
@post = Post.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @post }
end
end
# GET /posts/new
# GET /posts/new.json
def new
@post = Post.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @post }
end
end
# GET /posts/1/edit
def edit
@post = Post.find(params[:id])
end
# POST /posts
# POST /posts.json
def create
@post = Post.new(params[:post])
respond_to do |format|
if @post.save
format.html { redirect_to @post, :notice => ‘Post was successfully created.’ }
format.json { render :json => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.json { render :json => @post.errors, :status => :unprocessable_entity }
end
end
end
# PUT /posts/1
# PUT /posts/1.json
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, :notice => ‘Post was successfully updated.’ }
format.json { head :no_content }
else
format.html { render :action => "edit" }
format.json { render :json => @post.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url }
format.json { head :no_content }
end
end
end
[/code]
[code language=”Groovy”]
package com.myblog
import org.springframework.dao.DataIntegrityViolationException
import org.apache.shiro.SecurityUtils
@Mixin(AuthUtils)
class PostController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index() {
redirect(action: "list", params: params)
}
def list(Integer max) {
def postList
def postTotal
def hisPostList
hisPostList=[]
params.max = Math.min(max ?: 3, 6)
if ( params.searchquery == null) {
postList = Post.list(params)
postTotal = Post.count()
}
else{
postList = Post.findAllByTitleLikeOrBodyLike(‘%’+params.searchquery+’%’,’%’+params.searchquery+’%’,params)
postTotal = Post.findAllByTitleLikeOrBodyLike(‘%’+params.searchquery+’%’,’%’+params.searchquery+’%’).size()
}
if (SecurityUtils.subject.authenticated){
def user = currentUser()
hisPostList = user.blog.posts
}
[postList: postList, postTotal: postTotal, params: params, hisPostList: hisPostList ]
}
def create() {
[post: new Post(params)]
}
def save() {
def post = new Post(params)
post.blog = currentUser().blog
if (!post.save(flush: true)) {
render(view: "create", model: [post: post])
return
}
flash.message = message(code: ‘default.created.message’, args: [message(code: ‘post.label’, default: ‘Post’), post.id])
redirect(mapping: "post", params: [username: post.blog.user.username, permalink: post.permalink])
}
def show() {
def post = Post.findByPermalink(params.permalink)
if (!post) {
flash.message = "Post not found"
redirect(action: "list")
return
}
def newComment = new Comment()
newComment.post = post
[post: post, newComment: newComment, comments: post.comments]
}
def edit(Long id) {
def post = Post.get(id)
if (!post) {
flash.message = message(code: ‘default.not.found.message’, args: [message(code: ‘post.label’, default: ‘Post’), id])
redirect(action: "list")
return
}
[post: post]
}
def update(Long id, Long version) {
def post = Post.get(id)
if (!post) {
flash.message = message(code: ‘default.not.found.message’, args: [message(code: ‘post.label’, default: ‘Post’), id])
redirect(action: "list")
return
}
if (version != null) {
if (post.version > version) {
post.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: ‘post.label’, default: ‘Post’)] as Object[],
"Another user has updated this Post while you were editing")
render(view: "edit", model: [post: post])
return
}
}
post.properties = params
if (!post.save(flush: true)) {
render(view: "edit", model: [post: post])
return
}
flash.message = message(code: ‘default.updated.message’, args: [message(code: ‘post.label’, default: ‘Post’), post.id])
redirect(action: "show", id: post.id)
}
def delete(Long id) {
def post = Post.get(id)
if (!post) {
flash.message = message(code: ‘default.not.found.message’, args: [message(code: ‘post.label’, default: ‘Post’), id])
redirect(action: "list")
return
}
try {
post.delete(flush: true)
flash.message = message(code: ‘default.deleted.message’, args: [message(code: ‘post.label’, default: ‘Post’), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: ‘default.not.deleted.message’, args: [message(code: ‘post.label’, default: ‘Post’), id])
redirect(action: "show", id: id)
}
}
}
[/code]
[code language=”Ruby”]
<p id="notice"><%= notice %></p>
<p>
<b>Title:</b>
<%= @post.title %>
</p>
<p>
<b>Text:</b>
<%= @post.text %>
</p>
<p>
<b>Blog:</b>
<%= @post.blog %>
</p>
<%= link_to ‘Edit’, edit_post_path(@post) %> |
<%= link_to ‘Back’, posts_path %>
[/code]
[code language=”Groovy”]
<%@ page import="com.myblog.Post" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: ‘post.label’, default: ‘Post’)}" />
<title><g:message code="default.show.label" args="[entityName]" /></title>
</head>
<body>
<a href="#show-post" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content…"/></a>
<div class="nav" role="navigation">
<ul>
<li><a class="home" href="${createLink(uri: ‘/’)}"><g:message code="default.home.label"/></a></li>
<li><g:link class="list" action="list"><g:message code="default.list.label" args="[entityName]" /></g:link></li>
<li><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>
</ul>
</div>
<div id="show-post" class="content scaffold-show" role="main">
<h1><g:message code="default.show.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<ol class="property-list post">
<g:if test="${postInstance?.title}">
<li class="fieldcontain">
<span id="title-label" class="property-label"><g:message code="post.title.label" default="Title" /></span>
<span class="property-value" aria-labelledby="title-label"><g:fieldValue bean="${postInstance}" field="title"/></span>
</li>
</g:if>
<g:if test="${postInstance?.body}">
<li class="fieldcontain">
<span id="body-label" class="property-label"><g:message code="post.body.label" default="Body" /></span>
<span class="property-value" aria-labelledby="body-label"><g:fieldValue bean="${postInstance}" field="body"/></span>
</li>
</g:if>
<g:if test="${postInstance?.dateCreated}">
<li class="fieldcontain">
<span id="dateCreated-label" class="property-label"><g:message code="post.dateCreated.label" default="Date Created" /></span>
<span class="property-value" aria-labelledby="dateCreated-label"><g:formatDate date="${postInstance?.dateCreated}" /></span>
</li>
</g:if>
<g:if test="${postInstance?.lastUpdated}">
<li class="fieldcontain">
<span id="lastUpdated-label" class="property-label"><g:message code="post.lastUpdated.label" default="Last Updated" /></span>
<span class="property-value" aria-labelledby="lastUpdated-label"><g:formatDate date="${postInstance?.lastUpdated}" /></span>
</li>
</g:if>
<g:if test="${postInstance?.permalink}">
<li class="fieldcontain">
<span id="permalink-label" class="property-label"><g:message code="post.permalink.label" default="Permalink" /></span>
<span class="property-value" aria-labelledby="permalink-label"><g:fieldValue bean="${postInstance}" field="permalink"/></span>
</li>
</g:if>
</ol>
<g:form>
<fieldset class="buttons">
<g:hiddenField name="id" value="${postInstance?.id}" />
<g:link class="edit" action="edit" id="${postInstance?.id}"><g:message code="default.button.edit.label" default="Edit" /></g:link>
<g:actionSubmit class="delete" action="delete" value="${message(code: ‘default.button.delete.label’, default: ‘Delete’)}" onclick="return confirm(‘${message(code: ‘default.button.delete.confirm.message’, default: ‘Are you sure?’)}’);" />
</fieldset>
</g:form>
</div>
</body>
</html>
[/code]