Foros de discusión

Liferay AutoFields don't work...

Alice ETCHEGARAY, modificado hace 9 años.

Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Hello everyone,

I tried to use Liferay AutoFields but it seems that with the 6.2 version, it doesn't work properly.
Here is my code :

  • In my edit.jsp :

<aui:fieldset id="applis">
<div class="lfr-form-row lfr-form-row-inline">
<div class="row-fields">
<aui:input fieldParam='appli' id='appli' name='appli' label="Application" inlineField="true" />
<aui:select id="appliAccessId" name="appliAccessId" label="Accès" inlineField="true">
<aui:option value="1" label="Lecture"></aui:option>
<aui:option value="2" label="Ecriture"></aui:option>
<aui:option value="3" label="Administrateur"></aui:option>
</aui:select>
</div>
</div>
</aui:fieldset>
<aui:script use="liferay-auto-fields">
new Liferay.AutoFields(
{
contentBox: '#applis-fields',
fieldIndexes: '<portlet:namespace />applisIndexes'
}
).render();
</aui:script>


  • In my portlet.java :


public void getAutoFieldsData(ActionRequest actionRequest,ActionResponse response)
throws Exception {
System.out.println("=============getAutoFieldsData==");
String applisIndexesString = actionRequest.getParameter("applisIndexes");
System.out.println("=============applisIndexesString=="+applisIndexesString);
int[] applisIndexes = StringUtil.split(applisIndexesString, 0);
for (int applisIndex : applisIndexes) {
String nom = ParamUtil.getString(actionRequest, "appli" + applisIndex);
System.out.println("=============appli=="+nom);
int accessId = ParamUtil.getInteger(actionRequest, "appliAccessId" + applisIndex);
System.out.println("=============typeId=="+accessId);
}
}


In the attached image, there is my actual result : I don't have the icons + / - to add or remove an autofield.
Please help me...

Alice

Archivos adjuntos:

Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Anyone to help me please ?
thumbnail
Manali Lalaji, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Expert Mensajes: 362 Fecha de incorporación: 9/03/10 Mensajes recientes
Hi Alice,

You need to provide correct contentBox Id in the script

Try this <aui:fieldset id="applis-fields">

instead of

<aui:fieldset id="applis">

HTH!
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Hi Manali,

Thank for your help, but it doesn't work yet... I have the same problem : no buttons "+" and "-" displayed....
thumbnail
Manali Lalaji, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Expert Mensajes: 362 Fecha de incorporación: 9/03/10 Mensajes recientes
Hi Alice,

Try this: I think some issue with <aui:fieldset> . I tried below code in local and it worked.


&lt;%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %&gt;
&lt;%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %&gt;

<div id="applis-fields">
<div class="lfr-form-row lfr-form-row-inline">
<div class="row-fields">
<aui:input fieldParam="appli" id="appli" name="appli" label="Application" inlineField="true" />
<aui:select id="appliAccessId" name="appliAccessId" label="Accès" inlinefield="true">
<aui:option value="1" label="Lecture"></aui:option>
<aui:option value="2" label="Ecriture"></aui:option>
<aui:option value="3" label="Administrateur"></aui:option>
</aui:select>
</div>
</div>
</div>
<aui:script use="liferay-auto-fields">
new Liferay.AutoFields(
{
contentBox: '#applis-fields', 
fieldIndexes: '<portlet:namespace />applisIndexes'
}
).render();
</aui:script>


HTH!
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Oh thank your very much ! It's working very well ;)
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Oh I haven't seen this problem : when I try to save for example two auto-fields (two rows) in my database, only one is saved...
How to correct this ?
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Should I built several columns named "appli0", "appli1", "appli2", "appli3", ... in my table ?
I think it's not the goodiest way to save data, but I don't know how to implement that.
Any help please ?
thumbnail
Manali Lalaji, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Expert Mensajes: 362 Fecha de incorporación: 9/03/10 Mensajes recientes
Hi Alice,

The issue that you are facing is because you need to pass 0 index for applisIndexes (default for 1st row). Thats y out of 2 rows only 2nd one is getting added.

Try below code:

&lt;%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %&gt;
&lt;%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %&gt;
&lt;%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%&gt;

<portlet:actionurl var="editActionURL" name="getAutoFieldsData">
</portlet:actionurl>


<aui:form action="<%=editActionURL%>" method="post" name="LiferayAutoFieldForm">

<div id="applis-fields">
<div class="lfr-form-row lfr-form-row-inline">
<div class="row-fields">
<aui:input fieldParam="appli0" id="appli0" name="appli0" label="Application" inlineField="true" />
<aui:select id="appliAccessId0" name="appliAccessId0" label="Accès" inlinefield="true">
<aui:option value="1" label="Lecture"></aui:option>
<aui:option value="2" label="Ecriture"></aui:option>
<aui:option value="3" label="Administrateur"></aui:option>
</aui:select>
</div>
</div>
</div>

 <aui:layout>
    <aui:column>
      <aui:button type="submit" value="Save" name="Save"></aui:button>
    </aui:column>
  </aui:layout>
  
<script type="text/javascript" charset="utf-8">
AUI().ready('liferay-auto-fields', function(A) {

    new Liferay.AutoFields(
    {
    contentBox: '#applis-fields', 
    fieldIndexes: '<portlet:namespace />applisIndexes'
    }
    ).render();
       
});
</script>
</aui:form>



and in your class

public void getAutoFieldsData(ActionRequest actionRequest, ActionResponse response) throws Exception
    {
        System.out.println("=============getAutoFieldsData==");
        String applisIndexesString = actionRequest.getParameter("applisIndexes");
        System.out.println("=============applisIndexesString==" + applisIndexesString);
        int[] applisIndexes = StringUtil.split(applisIndexesString, 0);
        for (int applisIndex : applisIndexes)
        {
            String nom = ParamUtil.getString(actionRequest, "appli" + applisIndex);
            System.out.println("=============appli==" + nom);
            int accessId = ParamUtil.getInteger(actionRequest, "appliAccessId" + applisIndex);
            System.out.println("=============typeId==" + accessId);
        }
    }


Check your sops, they should give you correct value.

HTH!
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Ok, but I don't understand how the data are saved into database : what column(s) should I create ? "applisIndexes" ?
Here is my table which in i would like to insert the auto fields :

CREATE TABLE projet_collaborateur
(
collaborateurid bigint NOT NULL,
nom character varying(75) NOT NULL,
prenom character varying(75) NOT NULL,
mail character varying(200) NOT NULL,
tel character varying(20) NOT NULL,
managerid bigint NOT NULL,
groupid bigint,
companyid bigint,
userid bigint,
statut character varying(30),
datesortie character varying(30),
dateentree character varying(30) NOT NULL,
societe character varying(200),
approuve boolean NOT NULL DEFAULT false,
appli character varying(40),
appliaccessid bigint,

CONSTRAINT projet_collaborateur_pkey PRIMARY KEY (collaborateurid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE projet_collaborateur
OWNER TO liferay;
thumbnail
Manali Lalaji, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Expert Mensajes: 362 Fecha de incorporación: 9/03/10 Mensajes recientes
You can follow the way Liferay uses for User Account Phones Section.
There is seperate table - Phone having all phone number details along with UserId in common.

HTH!
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Ok, but I have already created another database connection, and here, when I save a new "collaborateur", the values of auto fields shouldn't go into the same table but into another table.
How to save at the same time the values into different tables when clicking ont the "Save" button ?
thumbnail
Manali Lalaji, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Expert Mensajes: 362 Fecha de incorporación: 9/03/10 Mensajes recientes
Hi Alice,

If you have similar requirement like as Liferay is doing, you can go by Service Builder and generate 2 entities.
Refer:Service Builder in Liferay
After generating entities, you can write your own logic to save data simultaneously. Also refer to Liferay Tables user_ and phone and its APIs to get more idea.

HTH!
Alice ETCHEGARAY, modificado hace 9 años.

RE: Liferay AutoFields don't work...

Junior Member Mensajes: 49 Fecha de incorporación: 23/01/14 Mensajes recientes
Owing to the fact that I'm new on Liferay, I can't develop my own script to do that...

I have already done a service builder, I built it and now I have two entities : "Collaborateur" and "Acces".
In "Acces", I have :
-accesid,
-collaborateurid,
-appliationid,
-acces.

My method to add an access is called "addAcces" and to add a collaborateur is "addCollaborateur".
But in my edit.jsp, I have only one form and I don't know how to refer the 2 tables in the submit....

Can you help me with this code please ?

<%@include file="/html/init.jsp"%>
<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>

<%
Collaborateur collaborateur = null;
Acces acces = null;

long collaborateurId = ParamUtil.getLong(request, "collaborateurId");

if (collaborateurId > 0) {
collaborateur = CollaborateurLocalServiceUtil.getCollaborateur(collaborateurId);
}

List<Manager> managers = ManagerLocalServiceUtil.getManagersByGroupId(scopeGroupId);
List<Application> applications = ApplicationLocalServiceUtil.getApplications(-1,-1);
List<Acces> acceses = AccesLocalServiceUtil.getAccesesByCollaborateur(collaborateurId);

String redirect = ParamUtil.getString(request, "redirect");
%>

<aui:model-context bean="<%= collaborateur %>" model="<%= Collaborateur.class %>" />
<portlet:renderURL var="viewCollaborateurURL" />
<portlet:actionURL name='<%= collaborateur == null ? "addCollaborateur" : "updateCollaborateur" %>' var="editCollaborateurURL" windowState="normal" />

<liferay-ui:header
backURL="<%= viewCollaborateurURL %>"
title='<%= (collaborateur != null) ? collaborateur.getNom() + " " + collaborateur.getPrenom(): "new-collaborateur" %>'
/>

<aui:form action="<%= editCollaborateurURL %>" method="POST" name="fm">
<aui:input type="hidden" name="redirect" value="<%= redirect %>" />

...

<h3>Droits d'accès aux applications :</h3>
<div id="applis-fields">
<div class="lfr-form-row lfr-form-row-inline">
<div class="row-fields">
<aui:select fieldParam="applicationId0" id="applicationId0" name="applicationId0" inlineField="true" showEmptyOption="<%= true %>" label="Application :">
<%
for(Application appli: applications){
%>
<aui:option value="<%= appli.getApplicationId() %>" selected="<%= acces != null && acces.getApplicationId() == acces.getApplicationId() %>"><%=HtmlUtil.escape(appli.getNom())%></aui:option>
<%
}
%>
</aui:select>
<aui:select fieldParam="acces0" id="acces0" name="acces0" label="Accès" inlineField="true">
<aui:option value="Lecture" label="Lecture"></aui:option>
<aui:option value="Ecriture" label="Ecriture"></aui:option>
<aui:option value="Administrateur" label="Administrateur"></aui:option>
</aui:select>
</div>
</div>
</div>
<script type="text/javascript" charset="utf-8">
AUI().ready('liferay-auto-fields', function(A) {
new Liferay.AutoFields(
{
contentBox: '#applis-fields',
fieldIndexes: '<portlet:namespace />applisIndexes'
}
).render();
});
</script>



<aui:button-row>
<aui:button type="submit" />
<aui:button type="cancel" onClick="<%= viewCollaborateurURL %>" />
</aui:button-row>

</aui:form>