简体   繁体   中英

updating a record in a db - JSF JPA etc

i am wondering if you could help me

basically i have created a db, and it adds data to two pieces of data to the table, leaving the rest of the columns blank, what i want to do, is be able to update these records with some more data for the blank columns, how can i achieve this ?

this is my code atm, but i just get a null point error and don't know if im doing it right

This is the ui

 <p>
                    Student Number : <!--More for me than anything -->
                    <h:inputText value="#{editMarkingBean.markSectionTwo.studentNumber}" />
                </p>

this is where the student number is entered, this is what i want to update, the record that contains this student number (no way can there be more than one of the same username )

                            <p:spinner id="ajaxspinner80-100" value="#{editMarkingBean.markSectionTwo.markSectionTwo}"
                                       stepFactor="1"  min="80" max="100" disabled="#{formBean.number != 8}">
                                <p:ajax update="ajaxspinnervalue" process="@this" />
                            </p:spinner>

this is the value i want to add to the column markSectionTwo

the save button

  <p:commandButton action="#{editMarkingBean.markSectionTwo}" value="#{bundle.buttonSave}" update=":growl" icon="ui-icon-disk"/>

the backing bean :

private MarkingService markingService;

@Inject
private MarkingFacade markingFacade;
public void markSectionTwo() {
    this.markingFacade.edit(this.markSectionTwo);
    this.setMessage("Mark Saved");
}

and this is the entity for the table creation

private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String studentNumber,markingStage, markingCompleted, markSectionOne, markSectionTwo, markSectionThree, markSectionFour, markSectionFive, overalMark, plagorism, feedback, comments;

i get the error

WARNING:   javax.el.PropertyNotFoundException: /lecturer/marking/marking-section-two.xhtml @109,82 value="#{editMarkingBean.markSectionTwo.markSectionTwo}": Target Unreachable, 'null' returned null

how can i update the records based on the student number ?

Thanks guys

EDIT

here is the complete editMarkingController class

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sws.control;

import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import sws.business.MarkingService;
import sws.entities.Marking;
import sws.persistance.MarkingFacade;

/**
 *
 * @author Richard
 */
@Named(value = "editMarkingBean")
@ViewScoped
public class EditMarkingController {

    private String searchString;
    private String ordering;
    private String criteria;
    private String match;
    private Date today;
    private String caseMatch;
    private int spinnerField;
    private Marking markSectionOne;
    private Marking studentNumber;
    private Marking markSectionTwo;


    private MarkingService markingService;

    @Inject
    private MarkingFacade markingFacade;

    /*
     public String markSectionOne() {
     //supposing the data in markSectionOne is filled...
     this.markingFacade.create(markSectionOne);
     this.setMessage("Mark Saved");
     //after saving...
     markSectionOne = new Marking();
     // now navigating to the next page
     return "/lecturer/marking/marking-section-two";
     }
     */
    public void editMark() {
        this.markingFacade.edit(this.markSectionTwo);
        this.setMessage("Mark Saved");
    }

    public void markSectionTwo() {
        this.markingFacade.edit(this.markSectionTwo);
        this.setMessage("Mark Saved");
    }

    private void setMessage(String message) {
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage(null, new FacesMessage(message, ""));
    }

    public Marking getMarkSectionTwo() {
        return markSectionTwo;
    }

    public void setMarkSectionTwo(Marking markSectionTwo) {
        this.markSectionTwo = markSectionTwo;
    }

    public String getSearchString() {
        return searchString;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }

    public String getOrdering() {
        return ordering;
    }

    public void setOrdering(String ordering) {
        this.ordering = ordering;
    }

    public String getCriteria() {
        return criteria;
    }

    public void setCriteria(String criteria) {
        this.criteria = criteria;
    }

    public String getMatch() {
        return match;
    }

    public void setMatch(String match) {
        this.match = match;
    }

    public Date getToday() {
        return today;
    }

    public void setToday(Date today) {
        this.today = today;
    }

    public String getCaseMatch() {
        return caseMatch;
    }

    public void setCaseMatch(String caseMatch) {
        this.caseMatch = caseMatch;
    }

    public int getSpinnerField() {
        return spinnerField;
    }

    public void setSpinnerField(int spinnerField) {
        this.spinnerField = spinnerField;
    }

    public Marking getMarkSectionOne() {
        return markSectionOne;
    }

    public void setMarkSectionOne(Marking markSectionOne) {
        this.markSectionOne = markSectionOne;
    }

    public Marking getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(Marking studentNumber) {
        this.studentNumber = studentNumber;
    }

    public MarkingService getMarkingService() {
        return markingService;
    }

    public void setMarkingService(MarkingService markingService) {
        this.markingService = markingService;
    }

    public MarkingFacade getMarkingFacade() {
        return markingFacade;
    }

    public void setMarkingFacade(MarkingFacade markingFacade) {
        this.markingFacade = markingFacade;
    }

}

the complete marking service

import java.util.List;
import javax.ejb.EJB;
import javax.inject.Inject;
import sws.entities.Marking;
import sws.entities.ProjectIdea;
import sws.persistance.MarkingFacade;
import sws.persistance.PersonFacade;

/**
 *
 * @author Richard
 */
public class MarkingService {

    @EJB
    private MarkingFacade markingFacade;

    public List<Marking> getAllMarks() {
        return markingFacade.findAll();
    }
}

and comeplte marking entity

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */

package sws.entities;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author Richard
 */
@Entity(name = "MARKING")
public class Marking implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String studentNumber,markingStage, markingCompleted, markSectionOne, markSectionTwo, markSectionThree, markSectionFour, markSectionFive, overalMark, plagorism, feedback, comments;

    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }

    public String getMarkingStage() {
        return markingStage;
    }

    public void setMarkingStage(String markingStage) {
        this.markingStage = markingStage;
    }

    public String getMarkingCompleted() {
        return markingCompleted;
    }

    public void setMarkingCompleted(String markingCompleted) {
        this.markingCompleted = markingCompleted;
    }

    public String getMarkSectionOne() {
        return markSectionOne;
    }

    public void setMarkSectionOne(String markSectionOne) {
        this.markSectionOne = markSectionOne;
    }

    public String getMarkSectionTwo() {
        return markSectionTwo;
    }

    public void setMarkSectionTwo(String markSectionTwo) {
        this.markSectionTwo = markSectionTwo;
    }

    public String getMarkSectionThree() {
        return markSectionThree;
    }

    public void setMarkSectionThree(String markSectionThree) {
        this.markSectionThree = markSectionThree;
    }

    public String getMarkSectionFour() {
        return markSectionFour;
    }

    public void setMarkSectionFour(String markSectionFour) {
        this.markSectionFour = markSectionFour;
    }

    public String getMarkSectionFive() {
        return markSectionFive;
    }

    public void setMarkSectionFive(String markSectionFive) {
        this.markSectionFive = markSectionFive;
    }

    public String getOveralMark() {
        return overalMark;
    }

    public void setOveralMark(String overalMark) {
        this.overalMark = overalMark;
    }

    public String getPlagorism() {
        return plagorism;
    }

    public void setPlagorism(String plagorism) {
        this.plagorism = plagorism;
    }

    public String getFeedback() {
        return feedback;
    }

    public void setFeedback(String feedback) {
        this.feedback = feedback;
    }

    public String getComments() {
        return comments;
    }

    public void setComments(String comments) {
        this.comments = comments;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Marking)) {
            return false;
        }
        Marking other = (Marking) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "sws.entities.Marking[ id=" + id + " ]";
    }

    public void setmarkSectionOne(String markSectionOne) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

EDIT 2:

i have added a postconstruct

@PostConstruct
public void markSectionTwo() {
    this.markingFacade.edit(this.markSectionTwo);
    markSectionTwo = new Marking();
    this.setMessage("Mark Saved");
}

but now i get the error message http 500 error

javax.servlet.ServletException: WELD-000049 Unable to invoke public void sws.control.EditMarkingController.markSectionTwo() on sws.control.EditMarkingController@44de1491
root cause

org.jboss.weld.exceptions.WeldException: WELD-000049 Unable to invoke public void sws.control.EditMarkingController.markSectionTwo() on sws.control.EditMarkingController@44de1491
root cause

java.lang.reflect.InvocationTargetException
root cause

javax.ejb.EJBException
root cause

java.lang.IllegalArgumentException: Object: null is not a known entity type.

when i try to load the page

EDIT 3

i have fixed that issue, but now i am only able to add the record, what i am trying to do is merge the records, so if the studentNumber is the same as already in the table then update the markSectionTwo to this value rather than creating a new row in the db for it

private Marking markSectionTwo;

    private MarkingService markingService;

    @Inject
    private MarkingFacade markingFacade;

    @PostConstruct
    public void init() {
        this.markSectionTwo = new Marking();
    }


    public String markSectionTwo() {
        //supposing the data in markSectionOne is filled...
        //markSectionOne.setMarkSectionOne("markSectionOne");
        //markSectionTwo.setMarkSectionTwo("markSectionTwo");
        this.markingFacade.edit(markSectionTwo);
        this.setMessage("Mark Saved");
        //after saving...
        markSectionTwo = new Marking();
        this.setMessage("Mark Saved");
        // now navigating to the next page
        return "/lecturer/marking/marking-section-two";
    }

    private void setMessage(String message) {
        FacesContext fc = FacesContext.getCurrentInstance();
        fc.addMessage(null, new FacesMessage(message, ""));
    }

your error message

javax.el.PropertyNotFoundException (...) #{editMarkingBean.markSectionTwo.markSectionTwo}"

basically says that you must have

  1. a managed bean called editMarkingBean
  2. an object in your managed bean called markSectionTwo with proper getter and setter
  3. an attribute in your object markSectionTwo called markSectionTwo with proper getter and setter

so what EL is trying to call is

editMarkingBean.getMarkSectionTwo().getMarkSectionTwo()

please check all your classes and, if possible, post all the relevant parts in your question, such as classes names (all of them), managed bean scope annotations, getters and setters and attributes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM