2013-09-24 4 views
0

У меня есть UserController, который в основном CRUD. и я автогенерировал его, используя сгенерированное представление в spring toolsuite.Grails: использование CRUD GSP в качестве шаблона

Он создал пользовательскую папку и отображает список, _form, создает, редактирует, показывает GSP.

package rms 

import org.springframework.dao.DataIntegrityViolationException 

class UserController { 

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

def index() { 
    redirect(action: "list", params: params) 
} 

def list(Integer max) { 
    params.max = Math.min(max ?: 10, 100) 
    [userInstanceList: User.list(params), userInstanceTotal: User.count()] 
} 

def create() { 
    [userInstance: new User(params)] 
} 

def save() { 
    def userInstance = new User(params) 
    if (!userInstance.save(flush: true)) { 
     render(view: "create", model: [userInstance: userInstance]) 
     return 
    } 

    flash.message = message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance.id]) 
    redirect(action: "show", id: userInstance.id) 
} 

def show(Long id) { 
    def userInstance = User.get(id) 
    if (!userInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "list") 
     return 
    } 

    [userInstance: userInstance] 
} 

def edit(Long id) { 
    def userInstance = User.get(id) 
    if (!userInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "list") 
     return 
    } 

    [userInstance: userInstance] 
} 

def update(Long id, Long version) { 
    def userInstance = User.get(id) 
    if (!userInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "list") 
     return 
    } 

    if (version != null) { 
     if (userInstance.version > version) { 
      userInstance.errors.rejectValue("version", "default.optimistic.locking.failure", 
         [message(code: 'user.label', default: 'User')] as Object[], 
         "Another user has updated this User while you were editing") 
      render(view: "edit", model: [userInstance: userInstance]) 
      return 
     } 
    } 

    userInstance.properties = params 

    if (!userInstance.save(flush: true)) { 
     render(view: "edit", model: [userInstance: userInstance]) 
     return 
    } 

    flash.message = message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), userInstance.id]) 
    redirect(action: "show", id: userInstance.id) 
} 

def delete(Long id) { 
    def userInstance = User.get(id) 
    if (!userInstance) { 
     flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "list") 
     return 
    } 

    try { 
     userInstance.delete(flush: true) 
     flash.message = message(code: 'default.deleted.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "list") 
    } 
    catch (DataIntegrityViolationException e) { 
     flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'user.label', default: 'User'), id]) 
     redirect(action: "show", id: id) 
    } 
} 
} 

У меня есть созданный GSP администратора. Он имеет заголовок, нижний колонтитул, затем боковую панель. Содержимое должно быть под div с классом = col-xs-10. Я не могу отправить изображение еще

<html> 
<head> 
     <title>Home</title> 
    <meta name="layout" content="basic"/> 

    <link rel="stylesheet" href="${resource(dir: 'css/RMS', file: 'non-responsive.css')}" type="text/css" media="screen"> 
    <link rel="stylesheet" href="${resource(dir: 'css/RMS', file: 'style.css')}" type="text/css" media="screen"> 
    <link rel="stylesheet" href="${resource(dir: 'css/RMS/personnel', file: 'admin.css')}" type="text/css" media="screen"> 
    <link rel="stylesheet" href="${resource(dir: 'css/RMS/personnel', file: 'tabs.css')}" type="text/css" media="screen"> 
</head> 
<body> 

<g:render template="/layouts/headerAdmin"></g:render> 

<div id="wrap"> 
    <div class="row"> 
     <div class="col-xs-2"> 
      <ul class="nav nav-pills nav-stacked" id="sticker"> 
      <li><a href="admin-reports.html"><strong>Reports</strong></a></li> 
      <li><a href="admin-tables.html"><strong>Manage Tables</strong></a></li> 
      <li class="active"><a href="admin-employees.html"><strong>Manage Employees</strong></a></li> 
      <li><a href="admin-menu.html"><strong>Manage Menu</strong></a></li> 
      <li><a href="admin-inventory.html"><strong>Inventory</strong></a></li> 
      <li><a href="admin-pos.html"><strong>Point of Sales</strong></a></li>   
      </ul> 
     </div> 
     <div class="col-xs-10"> 
     </div> 
    </div> 
</div> 

<script type="text/javascript"> 
    $('#myTabs a').click(function (e) { 
    e.preventDefault() 
    $(this).tab('show') 
    }); 
</script> 

</body> 

Как вы используете GSPS пользователей в качестве шаблонов в админ GSP, так что таблицы будут отображаться в админке? В основном список gsp отображает таблицы базы данных. Это, что там в списке GSPS кстати

<%@ page import="rms.User" %> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="layout" content="main"> 
    <g:set var="entityName" value="${message(code: 'user.label', default: 'User')}" /> 
    <title><g:message code="default.list.label" args="[entityName]" /></title> 
</head> 
<body> 
    <a href="#list-user" 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-user" 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="username" title="${message(code: 'user.username.label', default: 'Username')}" /> 

        <g:sortableColumn property="password" title="${message(code: 'user.password.label', default: 'Password')}" /> 

        <g:sortableColumn property="dateOfBirth" title="${message(code: 'user.dateOfBirth.label', default: 'Date Of Birth')}" /> 

        <g:sortableColumn property="contactNumber" title="${message(code: 'user.contactNumber.label', default: 'Contact Number')}" /> 

        <g:sortableColumn property="employeeID" title="${message(code: 'user.employeeID.label', default: 'Employee ID')}" /> 

        <g:sortableColumn property="employeeStatus" title="${message(code: 'user.employeeStatus.label', default: 'Employee Status')}" /> 

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

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

        <td>${fieldValue(bean: userInstance, field: "password")}</td> 

        <td><g:formatDate date="${userInstance.dateOfBirth}" /></td> 

        <td>${fieldValue(bean: userInstance, field: "contactNumber")}</td> 

        <td>${fieldValue(bean: userInstance, field: "employeeID")}</td> 

        <td>${fieldValue(bean: userInstance, field: "employeeStatus")}</td> 

       </tr> 
      </g:each> 
      </tbody> 
     </table> 
     <div class="pagination"> 
      <g:paginate controller="user" total="${userInstanceTotal}" /> 
     </div> 
    </div> 
</body> 

ответ

0

Если вы спрашиваете, спрашивая, как показать список контроллера действий пользователя внутри этого DIV, вы могли бы сделать:

<div class="col-xs-10"> 
    <g:include controller="user" action="list" /> 
</div> 

Вы можете Подробнее читайте здесь: http://grails.org/doc/latest/ref/Tags/include.html

Но я думаю, что вы действительно хотите создать макет, который можно использовать на всех страницах администратора. Вы можете прочитать больше о том, что здесь: http://grails.org/doc/latest/guide/theWebLayer.html#layouts

макет будет применяться стиль к любому GSP, что вы применяете его, чтобы вы могли создать «админ» раскладку, то в вашей CRUD GSP вы могли бы пойти:

<meta name="layout" content="admin" /> 

Внутри метки <head>.

+0

Я использовал тег include, как указано выше. и он показал список gsp. но у gsp есть ag: sortablecolumn tag и всякий раз, когда я сортирую один из заголовков таблицы, он не сортируется под страницей администратора, а к пользователю/списку, подобному этому пользователю/списку? sort = username & max = 10 & order = asc – Jan

+0

Да, это потому, что вы включая выданный вывод действия списка контроллера пользователя. Который, если я правильно помню, создаст все ссылки для пользовательского контроллера. Я бы рекомендовал вам взглянуть на вариант макета, так как он будет намного чище и проще реализовать. Вы в основном перенесли admin.gsp под «grails-app/views/layouts», а затем под «col-xs-10» div place «». затем используйте то, что я сказал выше, как метатег в голове любого ВСП, желающий макет «admin». – Welsh

Смежные вопросы