Fórum
How to write data from a form to a database
Nico Schreiber, modificado 12 Anos atrás.
How to write data from a form to a database
New Member Postagens: 16 Data de Entrada: 28/11/11 Postagens Recentes
Hi,
I have created a simple Liferay portlet with a form. In this form are displayed some userdata. By clicking the submit button I want to save the displayed userdata of
the current user in a database. To creat a database table I used the Liferay Service Builder. Everything works fine.
I read that I have to modify a file called ...LocalServiceImpl.java, which was created during the build process of the Service Builder.
What I have to do to save the data in the database?
Here ist my service.xml
Here is my bean to display the userdata of the current usere
Here is my view.xhtml
Regards,
Nico
I have created a simple Liferay portlet with a form. In this form are displayed some userdata. By clicking the submit button I want to save the displayed userdata of
the current user in a database. To creat a database table I used the Liferay Service Builder. Everything works fine.
I read that I have to modify a file called ...LocalServiceImpl.java, which was created during the build process of the Service Builder.
What I have to do to save the data in the database?
Here ist my service.xml
<!--?xml version="1.0" encoding="UTF-8"?-->
<service-builder package-path="de.test">
<author>Nico Schreiber</author>
<namespace>Test</namespace>
<entity name="Antraege" local-service="true" remote-service="false">
<column name="userId" type="String" primary="true"></column>
<column name="firstName" type="String"></column>
<column name="lastName" type="String"></column>
<column name="email" type="String"></column>
<column name="telephone" type="String"></column>
<column name="department" type="String"></column>
<column name="costCenter" type="String"></column>
<column name="costCenterChief" type="String"></column>
<column name="date" type="Date"></column>
<order by="asc">
<order-column name="userId" />
</order>
<finder name="FirstName" return-type="Collection">
<finder-column name="firstName"></finder-column>
</finder>
<finder name="LastName" return-type="Collection">
<finder-column name="lastName"></finder-column>
</finder>
<finder name="EMail" return-type="Collection">
<finder-column name="email"></finder-column>
</finder>
<finder name="Telephone" return-type="Collection">
<finder-column name="telephone"></finder-column>
</finder>
<finder name="Department" return-type="Collection">
<finder-column name="department"></finder-column>
</finder>
<finder name="CostCenter" return-type="Collection">
<finder-column name="costCenter"></finder-column>
</finder>
<finder name="CostCenterChief" return-type="Collection">
<finder-column name="costCenterChief"></finder-column>
</finder>
</entity>
</service-builder>
Here is my bean to display the userdata of the current usere
package de.test.beans;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.User;
import com.liferay.portal.service.UserLocalServiceUtil;
@ManagedBean(name = "userdata")
@SessionScoped
public class Userdata implements Serializable{
private static final long serialVersionUID = 1L;
private String userId;
private String firstName;
private String lastName;
private String eMail;
private String telephone;
private String department;
private String costCenter;
private String costCenterChief;
public Userdata() throws PortalException, SystemException {
FacesContext ctx = FacesContext.getCurrentInstance();
String remoteUser = ctx.getExternalContext().getRemoteUser();
User user = UserLocalServiceUtil.getUserById(Long.parseLong(remoteUser));
userId = user.getScreenName();
firstName = user.getFirstName();
lastName= user.getLastName();
eMail = user.getEmailAddress();
telephone = (String) user.getExpandoBridge().getAttribute("telephonenumber");
department = (String) user.getExpandoBridge().getAttribute("department");
costCenter = (String) user.getExpandoBridge().getAttribute("costCenter");
costCenterChief = (String) user.getExpandoBridge().getAttribute("costCenterChief");
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void seteMail(String eMail) {
this.eMail = eMail;
}
public String geteMail() {
return eMail;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getTelephone() {
return telephone;
}
public void setDepartment(String department) {
this.department = department;
}
public String getDepartment() {
return department;
}
public void setCostCenter(String costCenter) {
this.costCenter = costCenter;
}
public String getCostCenter() {
return costCenter;
}
public void setCostCenterChief(String costCenterChief) {
this.costCenterChief = costCenterChief;
}
public String getCostCenterChief() {
return costCenterChief;
}
}
Here is my view.xhtml
[...]
<h:form>
<p:fieldset legend="#{msg.userdata_head}"><br>
<h:panelgrid columns="2" cellpadding="10" columnclasses="userdata, userdata_output" styleclass="userdata">
<h:outputlabel for="userID" value="#{msg.userId}" />
<h:outputtext id="userId" value="#{userdata.userId}" />
<h:outputlabel for="firstName" value="#{msg.firstName}" />
<h:outputtext id="firstName" value="#{userdata.firstName}" />
<h:outputlabel for="lastName" value="#{msg.lastName}" />
<h:outputtext id="lastName" value="#{userdata.lastName}" />
<h:outputlabel for="eMail" value="#{msg.eMail}" />
<h:outputtext id="eMail" value="#{userdata.eMail}" />
<h:outputlabel for="telephone" value="#{msg.telephone}" />
<h:outputtext id="telephone" value="#{userdata.telephone}" />
<h:outputlabel for="dapartment" value="#{msg.department}" />
<h:outputtext id="department" value="#{userdata.department}" />
<h:outputlabel for="costCenter" value="#{msg.costCenter}" />
<h:outputtext id="costCenter" value="#{userdata.costCenter}" />
<h:outputlabel for="costCenterChief" value="#{msg.costCenterChief}" />
<h:outputtext id="costCenterChief" value="#{userdata.costCenterChief}" />
</h:panelgrid>
</p:fieldset>
<br>
[...]
<h:commandbutton class="appointment_button_send" id="sendAppointment" value="#{msg.send_button}" action="view2.xhtml" />
</h:form>
Regards,
Nico
Dave Weitzel, modificado 12 Anos atrás.
RE: How to write data from a form to a database
Regular Member Postagens: 208 Data de Entrada: 18/11/09 Postagens Recentes
The LocalServiceUtil class has to have the main methods that will add delete modify your entities, you will then call these from your portlet.java code processing the form request data.
have you read the Liferay In Action book at all it has good explanation and examples.
You will need to create typically a method
have left out details and replace with all your objects
In your portlet code you will need to create a new Antraege object
and then set its values from the form before calling:
hope that helps
Dave
have you read the Liferay In Action book at all it has good explanation and examples.
You will need to create typically a method
public addAntraege (Antraege newAntraege, userId){
[indent]Antraege antraege= antraegePersinstence.create(
counterLocalService.increment(Antraege .class.getName()));
// gives a unique id to item
...
atnraege.setObject= newAntraege.getObject();
return antraegePersitence.update(antraege,false);[/indent]
}
have left out details and replace with all your objects
In your portlet code you will need to create a new Antraege object
Antraege antraege = new AntraegeImpl();
and then set its values from the form before calling:
AntraegeLocalServiceUtil.addAntraege(antraege, userId);
hope that helps
Dave
Nico Schreiber, modificado 12 Anos atrás.
RE: How to write data from a form to a database
New Member Postagens: 16 Data de Entrada: 28/11/11 Postagens Recentes
Hi Dave,
thanks for your help. I have modified the AntraegeLocalServiceImpl, but I get the error "The method create(String) in the type AntraegePersistence is not applicable for the arguments (long)". How can I fix this error?
Here is my AntraegeLocalServiceImpl.java
In my first post I had added the code of my Userdata.java. How can I integrate the commands
Antraege antraege = new AntraegeImpl();
and
AntraegeLocalServiceUtil.addAntraege(antraege, userId);
in this class to save the data like userId, firstName, ... in the database?
Regards,
Nico
thanks for your help. I have modified the AntraegeLocalServiceImpl, but I get the error "The method create(String) in the type AntraegePersistence is not applicable for the arguments (long)". How can I fix this error?
Here is my AntraegeLocalServiceImpl.java
public class AntraegeLocalServiceImpl extends AntraegeLocalServiceBaseImpl {
public Antraege addAntraege(Antraege newAntraege, String userId){
Antraege antrag = antraegePersistence.create(counterLocalService.increment(Antraege.class.getName()));
antrag.setUserId(newAntraege.getUserId());
antrag.setFirstName(newAntraege.getFirstName());
antrag.setLastName(newAntraege.getLastName());
antrag.setEmail(newAntraege.getEmail());
antrag.setTelephone(newAntraege.getTelephone());
antrag.setDepartment(newAntraege.getDepartment());
antrag.setCostCenter(newAntraege.getCostCenter());
antrag.setCostCenterChief(newAntraege.getCostCenterChief());
antrag.setBrandId(newAntraege.getBrandId());
antrag.setStatement(newAntraege.getStatement());
antrag.setDate(newAntraege.getDate());
return antraegePersistence.update(antrag, false);
}
}
In my first post I had added the code of my Userdata.java. How can I integrate the commands
Antraege antraege = new AntraegeImpl();
and
AntraegeLocalServiceUtil.addAntraege(antraege, userId);
in this class to save the data like userId, firstName, ... in the database?
Regards,
Nico
Sagar A Vyas, modificado 12 Anos atrás.
RE: How to write data from a form to a database
Liferay Master Postagens: 679 Data de Entrada: 17/04/09 Postagens Recentes
Hi Nico,
I guess
Create method expect String and counterImpl will return long.
Thanks,
Sagar Vyas
. How can I fix this error?
I guess
public de.test.model.Antraege create(java.lang.String userId);
Create method expect String and counterImpl will return long.
Thanks,
Sagar Vyas
Nico Schreiber, modificado 12 Anos atrás.
RE: How to write data from a form to a database
New Member Postagens: 16 Data de Entrada: 28/11/11 Postagens Recentes
Hi Sagar,
I modified my AntraegeLocalServiceImpl and fixed the create error. Now the code looks like that:
Is this correct?
Regards,
Nico
I modified my AntraegeLocalServiceImpl and fixed the create error. Now the code looks like that:
public class AntraegeLocalServiceImpl extends AntraegeLocalServiceBaseImpl {
public Antraege addAntraege(Antraege newAntraege, String userId) throws SystemException{
Antraege antraege = antraegePersistence.create(userId);
antraege.setUserId(newAntraege.getUserId());
antraege.setFirstName(newAntraege.getFirstName());
antraege.setLastName(newAntraege.getLastName());
antraege.setEmail(newAntraege.getEmail());
antraege.setTelephone(newAntraege.getTelephone());
antraege.setDepartment(newAntraege.getDepartment());
antraege.setCostCenter(newAntraege.getCostCenter());
antraege.setCostCenterChief(newAntraege.getCostCenterChief());
antraege.setBrandId(newAntraege.getBrandId());
antraege.setStatement(newAntraege.getStatement());
antraege.setDate(newAntraege.getDate());
return antraegePersistence.update(antraege, false);
}
}
Is this correct?
Regards,
Nico
Sandeep Nair, modificado 12 Anos atrás.
RE: How to write data from a form to a database
Liferay Legend Postagens: 1744 Data de Entrada: 06/11/08 Postagens Recentes
try the following
Regards,
Sandeep
return addAntraege(antraege);
Regards,
Sandeep
Nico Schreiber, modificado 12 Anos atrás.
RE: How to write data from a form to a database
New Member Postagens: 16 Data de Entrada: 28/11/11 Postagens Recentes
Hi,
I modified the return how it was recommended by Sandeep. Now I want to save the entries of my form in the database. Therefore I generated following Bean:
I get an error in line AntraegeLocalServiceUtil.addAntraege(antraege, userId); -->"The method addAntraege(Antraege) in the type AntraegeLocalServiceUtil is not applicable for the arguments (Antraege, String)"
When I change it to AntraegeLocalServiceUtil.addAntraege(antraege); the error is away but from my point of view I have to commit the userId. Or isn`t it necessary?
Is the way I set the attributes like userId, firstName, ... correct?
Regards,
Nico
I modified the return how it was recommended by Sandeep. Now I want to save the entries of my form in the database. Therefore I generated following Bean:
@ManagedBean (name="transfer")
@SessionScoped
public class TransferBean implements Serializable{
private static final long serialVersionUID = 1L;
private String userId;
private String firstName;
private String lastName;
private String eMail;
private String telephone;
private String department;
private String costCenter;
private String costCenterChief;
private String statement;
public void addAntrag()throws PortalException, SystemException{
Antraege antraege = new AntraegeImpl();
FacesContext ctx = FacesContext.getCurrentInstance();
String remoteUser = ctx.getExternalContext().getRemoteUser();
User user = UserLocalServiceUtil.getUserById(Long.parseLong(remoteUser));
userId = user.getScreenName();
firstName = user.getFirstName();
lastName= user.getLastName();
eMail = user.getEmailAddress();
telephone = (String) user.getExpandoBridge().getAttribute("telephonenumber");
department = (String) user.getExpandoBridge().getAttribute("department");
costCenter = (String) user.getExpandoBridge().getAttribute("costCenter");
costCenterChief = (String) user.getExpandoBridge().getAttribute("costCenterChief");
AntraegeLocalServiceUtil.addAntraege(antraege, userId);
}
[...] (getter and setter)
I get an error in line AntraegeLocalServiceUtil.addAntraege(antraege, userId); -->"The method addAntraege(Antraege) in the type AntraegeLocalServiceUtil is not applicable for the arguments (Antraege, String)"
When I change it to AntraegeLocalServiceUtil.addAntraege(antraege); the error is away but from my point of view I have to commit the userId. Or isn`t it necessary?
Is the way I set the attributes like userId, firstName, ... correct?
Regards,
Nico
Sandeep Nair, modificado 12 Anos atrás.
RE: How to write data from a form to a database
Liferay Legend Postagens: 1744 Data de Entrada: 06/11/08 Postagens Recentes
I believe in your antraege model you have userId. Just set it using the setter as you were doing before and call addAntraege. You were doing that before werent just replace return *persistence.update with addAntreage as i said.
Regards,
Sandeep
Regards,
Sandeep