Skip to content

Commit

Permalink
Création d'un nouveau scaffold
Browse files Browse the repository at this point in the history
  • Loading branch information
alecuelle committed Dec 5, 2013
1 parent ab1151b commit 4733a2a
Show file tree
Hide file tree
Showing 10 changed files with 531 additions and 0 deletions.
104 changes: 104 additions & 0 deletions grails-app/controllers/fr/ippon/demo/grails/ContactController.groovy
@@ -0,0 +1,104 @@
package fr.ippon.demo.grails



import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional

@Transactional(readOnly = true)
class ContactController {

static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond Contact.list(params), model:[contactInstanceCount: Contact.count()]
}

def show(Contact contactInstance) {
respond contactInstance
}

def create() {
respond new Contact(params)
}

@Transactional
def save(Contact contactInstance) {
if (contactInstance == null) {
notFound()
return
}

if (contactInstance.hasErrors()) {
respond contactInstance.errors, view:'create'
return
}

contactInstance.save flush:true

request.withFormat {
form {
flash.message = message(code: 'default.created.message', args: [message(code: 'contactInstance.label', default: 'Contact'), contactInstance.id])
redirect contactInstance
}
'*' { respond contactInstance, [status: CREATED] }
}
}

def edit(Contact contactInstance) {
respond contactInstance
}

@Transactional
def update(Contact contactInstance) {
if (contactInstance == null) {
notFound()
return
}

if (contactInstance.hasErrors()) {
respond contactInstance.errors, view:'edit'
return
}

contactInstance.save flush:true

request.withFormat {
form {
flash.message = message(code: 'default.updated.message', args: [message(code: 'Contact.label', default: 'Contact'), contactInstance.id])
redirect contactInstance
}
'*'{ respond contactInstance, [status: OK] }
}
}

@Transactional
def delete(Contact contactInstance) {

if (contactInstance == null) {
notFound()
return
}

contactInstance.delete flush:true

request.withFormat {
form {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'Contact.label', default: 'Contact'), contactInstance.id])
redirect action:"index", method:"GET"
}
'*'{ render status: NO_CONTENT }
}
}

protected void notFound() {
request.withFormat {
form {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'contactInstance.label', default: 'Contact'), params.id])
redirect action: "index", method: "GET"
}
'*'{ render status: NOT_FOUND }
}
}
}
30 changes: 30 additions & 0 deletions grails-app/domain/fr/ippon/demo/grails/Contact.groovy
@@ -0,0 +1,30 @@
package fr.ippon.demo.grails

class Contact {

/**
* Les propriétés ci-dessous référencent les colonnes
* qui vont être créées dans la base de données lors
* du lancement de l'application. Elle permettent
* aussi de déclarer les champs qui seront affichés
* sur l'interface de l'application.
*/
String last_name
String first_name
String email_address

/**
* Cette section permet de spécifier des contraintes
* liées à l'ajustement des champs sur l'interface.
*/
static constraints = {

/**
* Je spécifie l'ordre d'affichage des champs dans
* l'interface qui sera automatiquement générée par Grails.
*/
last_name()
first_name()
email_address()
}
}
8 changes: 8 additions & 0 deletions grails-app/i18n/messages.properties
Expand Up @@ -53,3 +53,11 @@ typeMismatch.java.lang.Long=Property {0} must be a valid number
typeMismatch.java.lang.Short=Property {0} must be a valid number
typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
typeMismatch.java.math.BigInteger=Property {0} must be a valid number

# Libelles des champs du domaine "Contact" dans l'interface.
# Si ces proprietes ne sont pas specifies, Grails va mettre par
# defaut les noms des proprietes de la classe domaine comme
# noms de champs.
contact.last_name.label=Nom
contact.first_name.label=Prenom
contact.email_address.label=Adresse email
28 changes: 28 additions & 0 deletions grails-app/views/contact/_form.gsp
@@ -0,0 +1,28 @@
<%@ page import="fr.ippon.demo.grails.Contact" %>



<div class="fieldcontain ${hasErrors(bean: contactInstance, field: 'last_name', 'error')} ">
<label for="last_name">
<g:message code="contact.last_name.label" default="Lastname" />

</label>
<g:textField name="last_name" value="${contactInstance?.last_name}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: contactInstance, field: 'first_name', 'error')} ">
<label for="first_name">
<g:message code="contact.first_name.label" default="Firstname" />

</label>
<g:textField name="first_name" value="${contactInstance?.first_name}"/>
</div>

<div class="fieldcontain ${hasErrors(bean: contactInstance, field: 'email_address', 'error')} ">
<label for="email_address">
<g:message code="contact.email_address.label" default="Emailaddress" />

</label>
<g:textField name="email_address" value="${contactInstance?.email_address}"/>
</div>

38 changes: 38 additions & 0 deletions grails-app/views/contact/create.gsp
@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'contact.label', default: 'Contact')}" />
<title><g:message code="default.create.label" args="[entityName]" /></title>
</head>
<body>
<a href="#create-contact" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></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="index"><g:message code="default.list.label" args="[entityName]" /></g:link></li>
</ul>
</div>
<div id="create-contact" class="content scaffold-create" role="main">
<h1><g:message code="default.create.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<g:hasErrors bean="${contactInstance}">
<ul class="errors" role="alert">
<g:eachError bean="${contactInstance}" var="error">
<li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
</g:eachError>
</ul>
</g:hasErrors>
<g:form url="[resource:contactInstance, action:'save']" >
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
</div>
</body>
</html>
41 changes: 41 additions & 0 deletions grails-app/views/contact/edit.gsp
@@ -0,0 +1,41 @@
<%@ page import="fr.ippon.demo.grails.Contact" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'contact.label', default: 'Contact')}" />
<title><g:message code="default.edit.label" args="[entityName]" /></title>
</head>
<body>
<a href="#edit-contact" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></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="index"><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="edit-contact" class="content scaffold-edit" role="main">
<h1><g:message code="default.edit.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<g:hasErrors bean="${contactInstance}">
<ul class="errors" role="alert">
<g:eachError bean="${contactInstance}" var="error">
<li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
</g:eachError>
</ul>
</g:hasErrors>
<g:form url="[resource:contactInstance, action:'update']" method="PUT" >
<g:hiddenField name="version" value="${contactInstance?.version}" />
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
</fieldset>
</g:form>
</div>
</body>
</html>
54 changes: 54 additions & 0 deletions grails-app/views/contact/index.gsp
@@ -0,0 +1,54 @@

<%@ page import="fr.ippon.demo.grails.Contact" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'contact.label', default: 'Contact')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<a href="#list-contact" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></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="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>
</ul>
</div>
<div id="list-contact" class="content scaffold-list" role="main">
<h1><g:message code="default.list.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<table>
<thead>
<tr>

<g:sortableColumn property="last_name" title="${message(code: 'contact.last_name.label', default: 'Lastname')}" />

<g:sortableColumn property="first_name" title="${message(code: 'contact.first_name.label', default: 'Firstname')}" />

<g:sortableColumn property="email_address" title="${message(code: 'contact.email_address.label', default: 'Emailaddress')}" />

</tr>
</thead>
<tbody>
<g:each in="${contactInstanceList}" status="i" var="contactInstance">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

<td><g:link action="show" id="${contactInstance.id}">${fieldValue(bean: contactInstance, field: "last_name")}</g:link></td>

<td>${fieldValue(bean: contactInstance, field: "first_name")}</td>

<td>${fieldValue(bean: contactInstance, field: "email_address")}</td>

</tr>
</g:each>
</tbody>
</table>
<div class="pagination">
<g:paginate total="${contactInstanceCount ?: 0}" />
</div>
</div>
</body>
</html>
62 changes: 62 additions & 0 deletions grails-app/views/contact/show.gsp
@@ -0,0 +1,62 @@

<%@ page import="fr.ippon.demo.grails.Contact" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'contact.label', default: 'Contact')}" />
<title><g:message code="default.show.label" args="[entityName]" /></title>
</head>
<body>
<a href="#show-contact" class="skip" tabindex="-1"><g:message code="default.link.skip.label" default="Skip to content&hellip;"/></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="index"><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-contact" 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 contact">

<g:if test="${contactInstance?.last_name}">
<li class="fieldcontain">
<span id="last_name-label" class="property-label"><g:message code="contact.last_name.label" default="Lastname" /></span>

<span class="property-value" aria-labelledby="last_name-label"><g:fieldValue bean="${contactInstance}" field="last_name"/></span>

</li>
</g:if>

<g:if test="${contactInstance?.first_name}">
<li class="fieldcontain">
<span id="first_name-label" class="property-label"><g:message code="contact.first_name.label" default="Firstname" /></span>

<span class="property-value" aria-labelledby="first_name-label"><g:fieldValue bean="${contactInstance}" field="first_name"/></span>

</li>
</g:if>

<g:if test="${contactInstance?.email_address}">
<li class="fieldcontain">
<span id="email_address-label" class="property-label"><g:message code="contact.email_address.label" default="Emailaddress" /></span>

<span class="property-value" aria-labelledby="email_address-label"><g:fieldValue bean="${contactInstance}" field="email_address"/></span>

</li>
</g:if>

</ol>
<g:form url="[resource:contactInstance, action:'delete']" method="DELETE">
<fieldset class="buttons">
<g:link class="edit" action="edit" resource="${contactInstance}"><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>

0 comments on commit 4733a2a

Please sign in to comment.