Hämta ut värde från inputtext i JSF
Hej. Jag läser en kurs i javapgrogrammering och har nu suttit flera veckor utan att komma vidare.
Jag har lyckats hämta ut data till en tabell i jsf från en databas.
Nu försöker jag implementera en updateringsknapp där man kan uppdatera valfri rad i tabellen. Följande steg har jag gjort:
1. Man trycker på en select-commandbutton till höger om raden man vill uppdatera.
2. Datan förs över från tabellen till inputtexter nedanför tabellen.
3. Under inputtexterna finns en update-commandbutton.
Nu försöker jag göra följande.
4. Jag tar bort datan som kom fram i inputtexterna och fyller i ny data.
5. Trycker på update och databasen samt tabellen ska uppdateras med den nya datan för de kolumnerna jag ändrat.
Jag KAN inte. Jag förstår helt enkelt inte och jag KAN inte HTML, något vi utgås från att kunna verkar et som. Jag kan inte få hjälp då lärarna är på semester och jag redan passerat deadlines.
Jag fattar inte hur jag hämtar ut värdet som jag skriver in i textinputfälten så att jag sedan kan använda de och uppdatera databasen med dem....
Extremt tacksam för hjälp.
Kod, xhtml-filen, jag har här tagit bort koden som inte fungerat för mig.
<h:body>
<f:view>
<h:dataTable value="#{managedBeanTask.lstTasks}" var="item">
<h:column>
<f:facet name ="header">workTaskNo</f:facet>
#{item.workTaskNo}
</h:column>
<h:column>
<f:facet name = "header">competenceNo</f:facet>
#{item.competenceNo}
</h:column>
<h:column>
<f:facet name = "header">errandID</f:facet>
#{item.errandID}
</h:column>
<h:column>
<f:facet name = "header">employeeNo</f:facet>
#{item.employeeNo}
</h:column>
<h:column>
<f:facet name = "header">who</f:facet>
#{item.who}
</h:column>
<h:column>
<f:facet name = "header">budgetTime</f:facet>
#{item.budgetTime}
</h:column>
<h:column>
<f:facet name = "header">timeUsed</f:facet>
#{item.verkligTidsåtgång}
</h:column>
<h:column>
<f:facet name = "header">status</f:facet>
#{item.status}
</h:column>
<h:column>
<f:facet name = "header">comments</f:facet>
#{item.comments}
</h:column>
<h:column>
<h:form>
<f:facet name="header">Action</f:facet>
<h:commandButton action="#{managedBeanTask.selectTask(item)}" value="Select">
</h:commandButton>
</h:form>
</h:column>
</h:dataTable>
<hr/>
<h:form>
<table>
<tr>
<td>Employee No :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.employeeNo}"/></td>
</tr>
<tr>
<td>Name :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.who}"/></td>
</tr>
<tr>
<td>Time Used :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.verkligTidsåtgång}"/></td>
</tr>
<tr>
<td>Status :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.status}"/></td>
</tr>
<tr>
<td>Comments :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.comments}"/></td></tr>
<tr>
<td><h:commandButton action="#{managedBeanTask.update()}" value="Update">
</h:commandButton>
<h:form>
</h:form>
</td>
</tr>
</table>
</h:form>
</f:view>
</h:body>
kod managed bean, varnar för mycket kod, det är från olika försök mm. Dvs väldigt mycket oanvänd kod,
package Beans;
import Controller.TaskController;
import Model.TaskModel;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
//@Named(value = "managedBeanTask")
@ManagedBean(name="managedBeanTask")
@SessionScoped
public class ManagedBeanTask implements Serializable {
@ManagedProperty(value="#{param.workTaskNo}")
private int workTaskNo;
@ManagedProperty(value="#{param.employeeNo}")
private int employeeNo;
@ManagedProperty(value="#{param.who}")
private String who;
@ManagedProperty(value="#{param.verkligTidsåtgång}")
private float verkligTidsåtgång;
@ManagedProperty(value="#{param.status}")
private String status;
@ManagedProperty(value="#{param.comments}")
private String comments;
@ManagedProperty(value="#{param.workTaskNox}")
private int workTaskNox;
@ManagedProperty(value="#{param.employeeNox}")
private int employeeNox;
@ManagedProperty(value="#{param.whox}")
private String whox;
@ManagedProperty(value="#{param.verkligTidsåtgångx}")
private float verkligTidsåtgångx;
@ManagedProperty(value="#{param.statusx}")
private String statusx;
@ManagedProperty(value="#{param.commentsx}")
private String commentsx;
private int inputEmployeenumber;
private String inputName;
private float inputTimeUsed;
private String inputStatus;
private String inputComments;
private int competenceNo;
private int errandID;
private float budgetTime;private TaskModel selectedModel = null;
private TaskModel updatedTask = null;
private TaskController taskController;public int getInputEmployeenumber() {
return inputEmployeenumber;
}public void setInputEmployeenumber(int inputEmployeenumber) {
this.inputEmployeenumber = inputEmployeenumber;
}public String getInputName() {
return inputName;
}public void setInputName(String inputName) {
this.inputName = inputName;
}public float getInputTimeUsed() {
return inputTimeUsed;
}public void setInputTimeUsed(float inputTimeUsed) {
this.inputTimeUsed = inputTimeUsed;
}public String getInputStatus() {
return inputStatus;
}public void setInputStatus(String inputStatus) {
this.inputStatus = inputStatus;
}public String getInputComments() {
return inputComments;
}public void setInputComments(String inputComments) {
this.inputComments = inputComments;
}public TaskModel getSelectedModel() {
return selectedModel;
}public void setSelectedModel(TaskModel selectedModel) {
this.selectedModel = selectedModel;
}public int getWorkTaskNox() {
return workTaskNox;
}public void setWorkTaskNox(int workTaskNox) {
this.workTaskNox = workTaskNox;
}public int getEmployeeNox() {
return employeeNox;
}public void setEmployeeNox(int employeeNox) {
this.employeeNox = employeeNox;
}public String getWhox() {
return whox;
}public void setWhox(String whox) {
this.whox = whox;
}public float getVerkligTidsåtgångx() {
return verkligTidsåtgångx;
}public void setVerkligTidsåtgångx(float verkligTidsåtgångx) {
this.verkligTidsåtgångx = verkligTidsåtgångx;
}public String getStatusx() {
return statusx;
}public void setStatusx(String statusx) {
this.statusx = statusx;
}public String getCommentsx() {
return commentsx;
}public void setCommentsx(String commentsx) {
this.commentsx = commentsx;
}public TaskModel getUpdatedTask() {
return updatedTask;
}public void setUpdatedTask(TaskModel updatedTask) {
this.updatedTask = updatedTask;
}public TaskController getTaskController() {
return taskController;
}public void setTaskController(TaskController taskController) {
this.taskController = taskController;
}public int getWorkTaskNo() {
return workTaskNo;
}public void setWorkTaskNo(int workTaskNo) {
this.workTaskNo = workTaskNo;
}public int getCompetenceNo() {
return competenceNo;
}public void setCompetenceNo(int competenceNo) {
this.competenceNo = competenceNo;
}public int getErrandID() {
return errandID;
}public void setErrandID(int errandID) {
this.errandID = errandID;
}public int getEmployeeNo() {
return employeeNo;
}public void setEmployeeNo(int employeeNo) {
this.employeeNo = employeeNo;
}public String getWho() {
return who;
}public void setWho(String who) {
this.who = who;
}public float getBudgetTime() {
return budgetTime;
}public void setBudgetTime(float budgetTime) {
this.budgetTime = budgetTime;
}public float getVerkligTidsåtgång() {
return verkligTidsåtgång;
}public void setVerkligTidsåtgång(float verkligTidsåtgång) {
this.verkligTidsåtgång = verkligTidsåtgång;
}public String getStatus() {
return status;
}public void setStatus(String status) {
this.status = status;
}public String getComments() {
return comments;
}public void setComments(String comments) {
this.comments = comments;
}
public ArrayList<TaskModel> getLstTasks() throws Exception{
init();
return taskController.getLstTasks();
}
public String deleteTask() throws Exception{
init();
int result = taskController.delTask(getWorkTaskNo());
if(result>0){
return "index";
} else{
return "failure";
}
}
public void selectTask(TaskModel m){
selectedModel = m;
setWorkTaskNo(selectedModel.getWorkTaskNo());
setEmployeeNo(selectedModel.getEmployeeNo());
setWho(selectedModel.getWho());
setVerkligTidsåtgång(selectedModel.getVerkligTidsåtgång());
setStatus(selectedModel.getStatus());
setComments(selectedModel.getComments());}
public void update() throws Exception{
updatedTask=new TaskModel();
// init();
// int result = taskController.updateTaskJSF(getEmployeeNo(), getWho(), getVerkligTidsåtgång(), getStatus(), getComments(), getWorkTaskNo());
//
// if(result>0){
// return "index";
// } else{
// return "failure";
// }
}
//förvar
// <f:param name="employeeNo" value="#{managedBeanTask.employeeNo}"/>
// <f:param name="who" value="#{managedBeanTask.who}"/>
// <f:param name="verkligTidsåtgång" value="#{managedBeanTask.verkligTidsåtgång}"/>
// <f:param name="status" value="#{managedBeanTask.status}"/>
// <f:param name="comments" value="#{managedBeanTask.comments}"/>
// <f:param name="workTaskNo" value="#{managedBeanTask.workTaskNo}"/>
public String editTask() throws Exception{
init();
int result = taskController.editTaskJSF(getEmployeeNo(), getWho(),getVerkligTidsåtgång(), getStatus(), getComments(), getWorkTaskNo());
if(result>0){
return "index";
} else{
return "failure";
}
}
public String saveTask() throws SQLException, Exception{
init();
int result = taskController.addTask(getCompetenceNo(), getErrandID(),getEmployeeNo(), getWho(), getBudgetTime(), getVerkligTidsåtgång(),
getStatus(), getComments());
if(result>0){
return "index";
} else{
return "failure";
}
}/**
* Creates a new instance of ManagedBeanTask
*/
public ManagedBeanTask() {
init();
selectedModel = new TaskModel();
}
public void init(){
try {
taskController = new TaskController();
} catch (Exception ex) {
System.out.println("Could not connect to database: " + ex.getMessage());
}
}
}// Sparat mat, ta bort snare om du inte använder det.
//
// <f:param name="workTaskNo" value="#{item.employeeNo}"/>
// <f:param name="workTaskNo" value="#{item.who}"/>
// <f:param name="workTaskNo" value="#{item.verkligTidsåtgång}"/>
// <f:param name="workTaskNo" value="#{item.status}"/>
// <f:param name="workTaskNo" value="#{item.comments}"/>
// <f:param name="workTaskNo" value="#{item.workTaskNo}"/>
Här är mitt nuvarande försök att "binda" det som skrivs in i inputtexterna, men det funkar inte alls: Jag vill alltså BINDA värdena som skrivs in
<table>
<tr>
<td>Employee No :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.employeeNo}, #{managedBeanTask.SetInputEmployeenumber}"/></td>
</tr>
<tr>
<td>Name :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.who}, #{managedBeanTask.SetInputName}"/></td>
</tr>
<tr>
<td>Time Used :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.verkligTidsåtgång}, #{managedBeanTask.SetInputTimeUsed}"/></td>
</tr>
<tr>
<td>Status :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.status}, #{managedBeanTask.SetInputStatus}"/></td>
</tr>
<tr>
<td>Comments :</td>
<td><h:inputText value="#{managedBeanTask.selectedModel.comments}, #{managedBeanTask.SetInputComments}"/></td></tr>
<tr>
<td><h:commandButton action="#{managedBeanTask.update()}" value="Update">
<f:param name="InputEmployeenumber" value="#{managedBeanTask.inputEmployeenumber}"/>
<f:param name="InputName" value="#{managedBeanTask.inputName}"/>
<f:param name="InputTimeUsed" value="#{managedBeanTask.inputTimeUsed}"/>
<f:param name="inputStatus" value="#{managedBeanTask.inputStatus}"/>
<f:param name="inputComments" value="#{managedBeanTask.inputComments}"/>
<f:param name="workTaskNo" value="#{item.workTaskNo}"/>
</h:commandButton>
</td>
</tr>
</table>
Det var åratal sedan jag gjorde nåt sånt och har inte datorn tillgänglig för att prova, så jag spekulerar rätt mycket när jag skriver detta:
Kan man alls ha åäö i metod/attribut-namnen? (Jag skriver alltid på engelska för att slippa ev problem med teckenuppsättning)
Kan man binda två attribut i en böna samtidigt genom att komma-separera dem?
<td><h:inputText value="#{managedBeanTask.selectedModel.verkligTidsåtgång}, #{managedBeanTask.SetInputTimeUsed}"/></td>
Är det verkligen attribut i bönan du vill binda eller vill du anropa en metod i bönan?
Får du några felutskrifter i klient? Kolla i konsoll.
Får du några felutskrifter i server? Kolla i loggfil.
Jag har inte heller en dator att testa på men skriver du bara tex:
<tr>
<td>Employee No :</td>
<td><h:inputText value="#{managedBeanTask.inputEmployeenumber}"/></td>
</tr>
så bör du kunna använda inputEmployeenumber i din bean för att sedan ändra i databasen