iberck
3/8/2017 - 6:39 AM

Grails commands databinding alternativa 7

Grails commands databinding alternativa 7

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="adminlte">
    <t:assetsLabelText/>
    <t:assetsOnOff/>
</head>

<body>

%{--BodyHeader--}%
<header id="Header" class="page-head">
    <content tag="3">active</content>
    <content tag="3.1">active</content>

    <h2 class="page-title">
        ${message(code: 'preferences.bodyheader.title')}
    </h2>
    <t:breadcrumbs
            data="${['Configuración': createLink(action: 'preferences'), 'Preferencias': createLink(action: 'preferences')]}"/>

    <div class="page-bar toolbarBox">
        <g:if test="${!layout_nosecondarymenu}">
            <div class="btn-toolbar">
                <ul id="toolbar-nav" class="nav nav-pills pull-right collapse navbar-collapse">
                </ul>
            </div>
        </g:if>
    </div>
</header>

<g:formRemote name="form-preferences" url="[action: 'updatePreferences']" update="form-preferences-body"
              class="form-horizontal" role="form">
    <div class="box box-primary">
        <div class="box-header with-border">
            <h3 class="box-title">Preferencias</h3>
        </div>

        <div class="box-body" id="form-preferences-body">
            <g:render template="form_preferences" model="[preferences: preferences]"/>
        </div>

        <div class="box-footer">
            %{--Actualizar--}%
            <g:actionSubmit value="enviar" action="updatePreferences"></g:actionSubmit>
        </div>
    </div>
</g:formRemote>

</body>
</html>
<g:hasErrors bean="${preferences}">
    <div class="alert alert-danger">
        <g:renderErrors bean="${preferences}" as="list"/>
    </div>
</g:hasErrors>
<t:notHasErrors bean="${preferences}">
    <t:alert type="success" title="Correcto" text="Se actualizó correctamente el panel!!!"/>
</t:notHasErrors>

<g:hiddenField name="membresia.id" value="${preferences.membresia.id}"/>

%{-- Idioma --}%
<div class="form-group ${hasErrors(bean: preferences, field: 'idioma', 'has-error')} has-feedback">
    <label for="idioma.id" class="control-label col-lg-3">
        <t:labelText required="true" label="Idioma de preferencia" tooltip="idioma.tooltip" error="${hasErrors(bean: preferences, field: 'idioma', 'true')}"/>
    </label>
    <div class="col-lg-4 ">
        <g:select name="idioma.id" from="${us.incorpora.sigrem.Lenguaje.list()}" optionKey="id"
                  noSelection="[null:message(code: 'idioma.notselected.label')]"
                  optionValue="nombre" value="${preferences?.idioma?.id}" />
    </div>
</div>
class SocioController {
    
    def preferences() {
        def membresia = GrailsUtils.currentUser.membresia
        PanelPreferences preferences = new PanelPreferences(membresia: membresia, idioma: membresia.idioma)
        render view: "preferences", model: [preferences: preferences]
    }

    def updatePreferences(PanelPreferences preferences) {
        if (preferences.hasErrors()) {
            render template: "/socio/form_preferences", model: [preferences: preferences]
            return
        }
        socioService.savePreferences(preferences)
        render template: "/socio/form_preferences", model: [preferences: preferences]
    }
}
@Validateable
class PanelPreferences {

    Membresia membresia
    Lenguaje idioma

    static constraints = {
        idioma nullable: false
    }
}

Alternativa 7 (ajax)

Una alternativa que aún no se ha explorado, es programar los paneles con ajax para evitar que se pierdan los datos de cada panel y así hacer menos complicado el proceso.

Incluso esta alternativa podría ser la solución a paneles modales con tabs:

TODO: alternativa incompleta

https://jqueryui.com/resources/demos/dialog/modal-form.html

http://jschr.github.io/bootstrap-modal/