Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scaffolding plugin is not generating correct views for basic CRUD operation #28

Open
ejaz-ahmed opened this issue Jun 22, 2015 · 1 comment

Comments

@ejaz-ahmed
Copy link

I am using grails version 2.5.0. I have created two similar domain classes namely PurchaseOrder and SalesOrder. Scaffolding was used to generate views and controllers for both. It was successful on generating views for PurchaseOrder but failed to produce correct _form.gsp for SalesOrder.

Here is my SalesOrder.groovy

package com.troutbird.pharmatics.order

class SalesOrder {
    Long id
    String salesOrderNumber
    Date dateCreated
    Date lastUpdated

    static hasMany = [salesOrderLineItems:SalesOrderLineItem]
    static constraints = {
        salesOrderNumber nullable: false
    }

    static mapping = {
        id generator: 'sequence', params: [sequence: 'seq_so_id']
    }

    String toString() {
        salesOrderNumber
    }

    String getSalesOrderNumber(){
        return (id? ("SO - " + String.format("%d", id)): 'Not Saved')
    }

}

Here is the _form.gsp created by scaffolding which has only one line

<%@ page import="com.troutbird.pharmatics.order.SalesOrder" %>

Whereas the generated for _form.gsp was fine.

Here is my PurchaseOrder.groovy

package com.troutbird.pharmatics.order

class PurchaseOrder {
    Long id
    String purchaseOrderNumber
    Date dateCreated
    Date lastUpdated

    static hasMany = [purchaseOrderLineItems:PurchaseOrderLineItem]

    static constraints = {
        purchaseOrderNumber nullable: false
    }

    static mapping = {
        id generator: 'sequence', params: [sequence: 'seq_po_id']
    }

    String toString() {
        purchaseOrderNumber
    }

    String getPurchaseOrderNumber(){
       return (id? ("PO - " + String.format("%d", id)): 'Not Saved') 
    }
}

The generated form template (with minor edits required by my application)

<%@ page import="com.troutbird.pharmatics.order.PurchaseOrder" %>



<div class="fieldcontain ${hasErrors(bean: purchaseOrderInstance, field: 'purchaseOrderNumber', 'error')} required">
    <label for="purchaseOrderNumber">
        <g:message code="purchaseOrder.purchaseOrderNumber.label" default="Purchase Order Number" />
        <span class="required-indicator">*</span>
    </label>
    <g:textField name="purchaseOrderNumber" required="" value="${purchaseOrderInstance?.purchaseOrderNumber}"/>

</div>

<div class="fieldcontain ${hasErrors(bean: purchaseOrderInstance, field: 'purchaseOrderLineItems', 'error')} ">
    <label for="purchaseOrderLineItems">
        <g:message code="purchaseOrder.purchaseOrderLineItems.label" default="Purchase Order Line Items" />

    </label>

<ul class="one-to-many">
<g:each in="${purchaseOrderInstance?.purchaseOrderLineItems?}" var="p">
    <li><g:link controller="purchaseOrderLineItem" action="show" id="${p.id}">${p?.encodeAsHTML()}</g:link></li>
</g:each>
<li class="add">
<g:link controller="purchaseOrderLineItem" action="create" params="['purchaseOrder.id': purchaseOrderInstance?.id]">${message(code: 'default.add.label', args: [message(code: 'purchaseOrderLineItem.label', default: 'PurchaseOrderLineItem')])}</g:link>
</li>
</ul>


</div>

Note: i have tried generate-all and generate-controller+ generate-views combination. Both had same results.

@ejaz-ahmed
Copy link
Author

This problem is not only with form templates. create, index, show and delete are equally affected.
Here is show.gsp

<%@ page import="com.troutbird.pharmatics.order.SalesOrder" %>
<!DOCTYPE html>
<html>
    <head>
        <meta name="layout" content="main">
        <g:set var="entityName" value="${message(code: 'salesOrder.label', default: 'SalesOrder')}" />
        <title><g:message code="default.show.label" args="[entityName]" /></title>
    </head>
    <body>
        <a href="#show-salesOrder" 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-salesOrder" 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 salesOrder">

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

If I use static scaffold = true, everything works fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant