Sure, here is the code:

The page its being activated with openDetalleUsuario() method which gets some data from a database and fills the Usuario Class. By default renders the first block usuarioBGenerales. The body of each block is on separate components (usuarioBGenerales and usuarioBRoles). The second block doesn't work. it's suppose to display a list of data when you click on listaRolesURL(AjaxDirectLink), like i said before the server side works and the data it's fecth from database but the ajax response does'nt (it tries to update the first block content).



PAGE TEMPLATE:


            <div id="headingsWrapper" style="height:80px;">
           
                    <div id="pageTitle"><h1>Detail Page</h1></div>
                    <div id="detailsHeader">                                               
                                <ul id="nav">
                                    <li><a jwcid="block1Submit">Generales</a></li>
                                    <li><a jwcid="block2Submit">Roles</a></li>                        
                                </ul>
                    </div>       
            </div>
           
            <div id="pageDetailContainer">
                <span jwcid="@RenderBlock" block="ognl:block">Block content goes here</span>
                <span jwcid="[EMAIL PROTECTED]"><span jwcid="usuarioBGenerales"/></span>
                <span jwcid="[EMAIL PROTECTED]"><span jwcid="usuarioBRoles"/></span>
            </div>


PAGE CODE:



    @Component(id="block1Submit", type="DirectLink",
            bindings = {"listener=listener:openBlock",
                        "parameters=literal:blockGenerales"})   
    public abstract DirectLink getBlock1Submit();
   

   
    @Component(id="block2Submit", type="DirectLink",
            bindings = {"listener=listener:openBlock",
                        "parameters=literal:blockRoles"})
    public abstract DirectLink getBlock2Submit();
   
   
   
    @Component(id="usuarioBGenerales", type="UsuarioBlockGeneral",
            bindings = {"usuario=currUsuario"})   
    public abstract UsuarioBlockGeneral getUsuarioBGenerales();
   

   
    @Component(id="usuarioBRoles", type="UsuarioBlockRoles",
            bindings = {"asignedRoles=currUsuario.roles",
                        "usuarioId=currUsuario.nombreUsuario"})       
    public abstract UsuarioBlockRoles getUsuarioBRoles();
   
   
      
   
    @InjectObject("service:net.qframe.UsuariosService")
    public abstract UsuariosService getUsuarioService();
   
   
   
    @Persist("session")
    public abstract Usuario getCurrUsuario();
    public abstract void setCurrUsuario(Usuario usuario);
   
   
   
    @InitialValue("literal:blockGenerales")
    public abstract String getBlockName();
    public abstract void setBlockName(String name);
   
   
   
   
    public void openBlock(String selectedId){
        setBlockName(selectedId);
    }
   
   
                  
    public Block getBlock()
    {
        return (Block) getPage().getComponent(getBlockName());   
    }

   
    public void openDetalleUsuario(final String idUsuario){
       
        if (idUsuario != null){
            Usuario usr = getUsuarioService().getUsuario(idUsuario);
            setCurrUsuario(usr);
        }
        else{
            setCurrUsuario(new Usuario());
        }
        getRequestCycle().activate(this);
    }



BLOCK 1 (usuarioBGenerales component):

            <div id="Attributes">   
               <form jwcid="userDetails">
                    <fieldset><legend style="font-size:1.55em;">General Information</legend>
                   
                            <div class="required">
                                <span jwcid="@FieldLabel" field="component:inputNombreUsuario">Nombre Usuario</span>
                                <input jwcid="inputNombreUsuario" type="text" maxlength="100"/>
                            </div>
                                                                           
                           
                            <div class="required">
                                <span jwcid="@FieldLabel" field="component:inputNombre1">Author</span>
                                <input jwcid="inputNombre1" type="text"  maxlength="60"/>
                                <input jwcid="inputNombre2" type="text"  maxlength="60" style="margin-top:10px;"/>
                            </div>
                           
                           
                            <div class="required">
                                <span jwcid="@FieldLabel" field="component:inputApellido1">Author</span>
                                <input jwcid="inputApellido1" type="text"  maxlength="60"/>
                                <input jwcid="inputApellido2" type="text"  maxlength="60" style="margin-top:10px;"/>
                            </div>
                           
                           
                            <div class="required">
                                <span jwcid="@FieldLabel" field="component:inputEmail">Author</span>
                                <input jwcid="inputEmail" type="text"  maxlength="60"/>
                            </div>
                           

                            <div class="required">
                                <span jwcid="@FieldLabel" field="component:inputPassword">Author</span>
                                <input jwcid="inputPassword" type="text" maxlength="60"/>
                            </div>
                                                       
                    </fieldset>
                   
                            <div id="submit" style="text-align:right;">
                                <a jwcid="@tacos:AjaxLinkSubmit"                       
                                    updateComponents="ognl:delegate.hasErrors ?  {} : {'Errores','userDetails'}"
                                    statusElement="literal:Mensaje">
                                   Save User
                                </a>                   
                            </div>
                   
               </form>
            </div>


 @ComponentClass(allowInformalParameters = true, allowBody = true)
public abstract class UsuarioBlockGeneral extends BaseComponent {

   
    @Component(id="userDetails", type="tacos:AjaxForm",
            bindings = {"listener=listener:updateUsuario",
                        "clientValidationEnabled=false",
                        "delegate=bean:delegate"})
    public abstract AjaxForm getUserDetails();
   
   
   
    @Bean
    public abstract QFrameValidationDelegate getDelegate();
   
   
   
    @Component(id="inputNombreUsuario", type="TextField",
            bindings = {"value=usuario.nombreUsuario",
                        "displayName=message:nombreUsuario-label",
                        "validator=validators:required,minLength=4[%nombreUsuario-msg1]"})   
    public abstract TextField getInputNombreUsuario();

   
   
    @Component(id="inputNombre1", type="TextField",
            bindings = {"value=usuario.nombre1",
                        "displayName=message:nombre1-label",
                        "validator=validators:required"})   
    public abstract TextField getInputNombre1();
   

   
    @Component(id="inputNombre2", type="TextField",
            bindings = {"value=usuario.nombre2",
                        "displayName=message:nombre2-label"})   
    public abstract TextField getInputNombre2();

   
   
    @Component(id="inputApellido1", type="TextField",
            bindings = {"value=usuario.apellido1",
                        "displayName=message:apellido1-label",
                        "validator=validators:required"})   
    public abstract TextField getInputApellido1();

   
   
    @Component(id="inputApellido2", type="TextField",
            bindings = {"value=usuario.apellido2",
                        "displayName=message:apellido2-label"})   
    public abstract TextField getInputApellido2();

   
   
    @Component(id="inputEmail", type="TextField",
            bindings = {"value=usuario.email",
                        "displayName=message:email-label",
                        "validator=validators:required"})   
    public abstract TextField getInputEmail();
   
   
   
    @Component(id="inputPassword", type="TextField",
            bindings = {"value=usuario.passwd",
                        "displayName=message:passwd-label",
                        "validator=validators:required"})   
    public abstract TextField getInputPassword();
   
   
   
    @InjectObject("service:net.qframe.UsuariosService")
    public abstract UsuariosService getUsuarioService();


    @Parameter(required = true)
    public abstract Usuario getUsuario();

   
   
   
    public void updateUsuario(IRequestCycle cycle){
        final Usuario usr = getUsuario();
        getUsuarioService().saveUsuario(usr);
       
        AjaxWebRequest ajax =(AjaxWebRequest)cycle.getAttribute(AjaxWebRequest.AJAX_REQUEST);
        if(ajax != null) ajax.addStatusResponse("Updating user...");
    }


}


BLOCK 2 (usuarioBRoles component):



        <div id="userRoles">
       
            <div jwcid="[EMAIL PROTECTED]" id="roleAvailables" style="margin: 5px 5px 5px 5px;">
                <div id="roleAvalilablesControls" class="controls">
                          <a jwcid="listaRolesURL">
                            listar
                          </a>               
                </div>
                <h4>Availables</h4>
                <div id="roleAvailablesList" class="pageList1Style">
                     <ul>
                         <span jwcid="foreachAvailable">
                            <li>
                                <a jwcid="availableSubmit">
                                    <span jwcid="@Insert" value="ognl:currAvailable.descripcion"/>
                                </a>
                            </li>
                        </span>
                    </ul>                                               
                </div>
               
            </div>
           
            <div id="roleAsigned" style="margin: 5px 5px 0px 5px;">
                <h4>Asigned</h4>
                <div jwcid="[EMAIL PROTECTED]" id="roleAsignedList" class="pageList1Style">
                    <ul>
                        <span jwcid="foreachAsigned">
                            <li>
                                <a jwcid="asignedSubmit">
                                    <span jwcid="@Insert" value="ognl:currAsigned.descripcion"/>
                                </a>
                            </li>
                        </span>
                    </ul>
                </div>
                <div id="roleAsignedControls" class="controls"><a href="">             </div>
           
        </div>




@ComponentClass(allowInformalParameters = true, allowBody = true)
public abstract class UsuarioBlockRoles extends BaseComponent {
   
    @InjectObject("service:tacos.AjaxWebRequest")
    public abstract AjaxWebRequest getAjaxRequest();
   

    @InjectObject("service:net.qframe.RolesService")
    public abstract RolesService getRolesService();
   
   
    @Component(id="listaRolesURL", type="tacos:AjaxDirectLink",
            bindings = {"listener=listener:searchRoles",
                        "updateComponents=ognl:{'roleAvailables'}"})
    public abstract AjaxDirectLink getListaRolesURL();
   
   

    @Component(id="foreachAvailable", type="For",
            bindings = {"source=availableRoles",
                        "value=currAvailable"})           
    public abstract ForBean getForeachAvailable();
   
   
   
    @Component(id="foreachAsigned", type="For",
            bindings = {"source=asignedRoles",
                        "value=currAsigned"})               
    public abstract ForBean getForeachAsigned();

   
       
    @Component(id="availableSubmit", type="tacos:AjaxDirectLink",
            bindings = {"listener=listener:doAsigned",
                        "parameters=ognl:currAvailable.roleId",
                        "updateComponents=ognl:{}"})       
    public abstract AjaxDirectLink getAvailableSubmit();
   

   
    @Component(id="asignedSubmit", type="tacos:AjaxDirectLink",
            bindings = {"listener=listener:doAvailable",
                        "parameters=ognl:currAsigned.roleId",
                        "updateComponents=ognl:{}"})       
    public abstract AjaxDirectLink getAsignedSubmit();
       
   
   
    @InitialValue("ognl:new java.util.ArrayList()")
    public abstract List getAvailableRoles();
    public abstract void setAvailableRoles(List roles);

   
   
    @Parameter(required = true)   
    public abstract List getAsignedRoles();
   
    @Parameter(required = true)
    public abstract String getUsuarioId();
   
   
    public abstract Role getCurrAvailable();
   
   
    public abstract Role getCurrAsigned();
       
   
    public void searchRoles(IRequestCycle cycle){
        List query = (List) getRolesService().notRolesUsuario(getUsuarioId());
        setAvailableRoles(query);
    }
   
   
   
    public void doAsigned(){
       
    }
   
   
   
    public void doAvailable(){
       
    }
   
   
   
   
}





Hope this could help. Thanks!!


Reply via email to