edycja rekordow w tabeli - hibernate

0

Witam

chce zrobic cos takiego ze mam formularz i po kliknieciu przycisku "get" obok konkretnego uzytkownika, przy uzyciu jego id jest wypelniany formularz. ja ten formularz sobie edytuje i klikam przycisk "set" i nastepuje edycja danych w tabeli a tym samym w bazie danych. Dane udaje mi sie pobrac i formularz sie wypelnia ale przy probie ich zapisu dostaje wyjatek:

 
type Exception report

message java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'employee' available as request attribute

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

to formularz w jsp:

<h2>Dodaj do bazy danych</h2>
    <form:form method="post" action="add" commandName="employee">
        <table>
        <tr>
            <td><form:label path="username"><spring:message code="label.username"/></form:label></td>
            <td><form:input path="username" /></td>
            <td><form:errors path="username" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="password"><spring:message code="label.password"/></form:label></td>
            <td><form:input path="password" /></td>
            <td><form:errors path="password" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td>
            <td><form:input path="firstname" /></td>
            <td><form:errors path="firstname" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td>
            <td><form:input path="lastname" /></td>
            <td><form:errors path="lastname" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="email"><spring:message code="label.email"/></form:label></td>
            <td><form:input path="email" /></td>
            <td><form:errors path="email" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="telephone"><spring:message code="label.telephone"/></form:label></td>
            <td><form:input path="telephone" /></td>
            <td><form:errors path="telephone" cssClass="error" /></td>
        </tr>
        <tr>
            <td><form:label path="pesel"><spring:message code="label.pesel"/></form:label></td>
            <td><form:input path="pesel" /></td>
            <td><form:errors path="pesel" cssClass="error" /></td>
        </tr>
        
        <tr>
            <td colspan="2">
                <input type="submit" value="<spring:message code="label.add"/>"/>
            </td>
        </tr>
    </table> 
    
    </form:form>
    
    <h3>Studenci</h3>
    <c:if  test="${!empty employeeList}">
    <table class="data">
    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Username</th>
        <th>Password</th>
        <th>Telephone</th>
        <th>PESEL</th>
        <th>Action</th>
    </tr>
    <c:forEach items="${employeeList}" var="emp">
        <tr>
            <td>${emp.firstname}, ${emp.lastname} </td>
            <td>${emp.email}</td>
            <td>${emp.username}</td>
            <td>${emp.password}</td>
            <td>${emp.telephone}</td>
            <td>${emp.pesel}</td>
            <td><a href="delete/${emp.id}">delete </a> <a href="get/${emp.id}"> get</a> <a href="set/${emp.id}"> set</a></td>
        </tr>
    </c:forEach>
    </table>
    </c:if>
 

i kontroler:

@RequestMapping("/get/{employeeId}")
    public String getEmployee(@ModelAttribute EmployeeEntity employee, BindingResult result, @PathVariable("employeeId") Integer employeeId, ModelMap map)
    {
    	
    	
    	map.addAttribute("employee", employeeManager.getEmployee(employeeId));
    	map.addAttribute("employeeList", employeeManager.getAllEmployees());
        
        
        return "editEmployeeList";
    }
    @RequestMapping("/get/set/{employeeId}")
    public String setEmployee(@ModelAttribute EmployeeEntity employee, BindingResult result, @PathVariable("employeeId") Integer employeeId, ModelMap map)
    {
    	
        employeeManager.editEmployee(employeeId);
        map.addAttribute("employeeList", employeeManager.getAllEmployees());
        
        return "editEmployeeList";
    }
 

dodam ze pod metoda .editEmployee mam w DAO metode update a pod getEmployee mam get(employeeEntity.class ...)

pomoze ktos?

0

A do jakiego kontrolera to niby przechodzi po kliknięciu submit? Bo ja tu widzę w formularzu jakieś "add" co nijak sie ma do twojego "set" w kontrolerze? Copy paste much? ;]

0

o cholera, faktycznie... tylko jak dodac tam drugi przycisk np. edit w tym formularzu skoro na gorze mam utworzona akcje "add" ? jak dodam buttona na dole to nic nie da bo i tak sie wykona akcja "add". co zrobic zeby byl wybor gdzie zadanie ma pojsc?

1

Ale właściwie po co masz tu dwa kontrolery? Przecież oba robią pewnie dokładnie to samo, z tą różnicą że w jednym przypadku masz nullowe ID encji a w drugim nie. Przecież tu i tu przesyłasz obiekt do DAO i robisz jakieś saveOrUpdate albo coś podobnego.

BTW taka rada ode mnie: operowanie w widoku na obiektach entity kończy się bardzo źle, szczególnie jak wyciągniesz gdzieś wyżej transakcje ;]

0

ok, od poczatku. wchodzimy na strone ta bazowa. mamy pusty formularz i userow na dole a obok kazdego z nich przycisk "get". klikamy "get" obok obojetne jakiego usera i formularz wypelnia sie jego danymi, edytujemy je sobie i klikamy "add" . rekord w bazie powinien byc edytowany. Problem u mnie jest taki ze po kliknieciu przycisku "get" (oznaczajacego pobranie danych) przegladarka przechodzi na url ".../get" i jesli klikne przycisk "add" to nie wykona sie /add tylko "get/add" a to powoduje problem. jak to rozwiazac?

1

Ach to akurat proste. Ścieżki względne vs bezwzględne. Jak jesteś pod adresem x/y i w formularzu masz add to przejdziesz do x/y/add ale jak masz /add to przejdziesz do /add. Zasadniczo ścieżki względne są przydatne tylko w pewnym wąskim zakresie sytuacji kiedy masz jakieś wielostopniowe kontrolery. U ciebie zapewne lepiej byłoby zmienic wszystko na same bezwzględne. Przy okazji: w kontrolerach nie definiujesz czy metody mają łykać post czy get. Warto to jednak zrobić ;)

0

nie rozumiem, czyli co mam dac w returnie metody get? redirecta jakiegos?

0

Ke? O czym ty mówisz? Bo ja mówie o formularzu i o jego action...

0

w formularzu mam caly czas akcje "add" ale chodzi mi o to ze zanim ja klikne tego submita to wczesniej innym przyciskiem pobieram sobie dane tym przyciskiem "get" , edytuje je i chce z powrotem zapisac do bazy

0

No dobrze, ale czemu nie dasz po prostu akcji /get i /add? Bo przecież o to ci chodzi. Ty w ogóle czytasz co ja do ciebie piszę? Nie kombinuj tylko tak zrób.

0

ok gra muzyka, obczailem juz, ustawilem odpowiedni action w formularzu i dziala. dzieki wielkie za pomoc :) pozdrawiam

temat do zamkniecia

1 użytkowników online, w tym zalogowanych: 0, gości: 1