Dodawanie rekordów z formularza do bazy

0

Proszę o pomoc co robie źle. Chce żeby dane z formularza były dodawane do bazy po naciśnięciu przycisku. Po przejsciu do strony z formularzem pojawia mi sie blad.

Proszę o pdanie jeśli mozecie wszytko co robie źle albo nie tak jak powinnienem.

javax.servlet.ServletException: viewId:/jsf/index.xhtml - View /jsf/index.xhtml could not be restored.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)

UserData

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;



@Entity
@Table
@SessionScoped
@ManagedBean
public class UserData implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long userId;

    private String userName;

    private String userSName;

    private String userLogin;

    private String userMail;

    private String userAcces;


    public UserData() {

    }

    public UserData(String userName, String userSName, String userLogin, String userMail, String userAcces) {
        this.userName = userName;
        this.userSName = userSName;
        this.userLogin = userLogin;
        this.userMail = userMail;
        this.userAcces = userAcces;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSName() {
        return userSName;
    }

    public void setUserSName(String userSName) {
        this.userSName = userSName;
    }

    public String getUserLogin() {
        return userLogin;
    }

    public void setUserLogin(String userLogin) {
        this.userLogin = userLogin;
    }

    public String getUserMail() {
        return userMail;
    }

    public void setUserMail(String userMail) {
        this.userMail = userMail;
    }

    public String getUserAcces() {
        return userAcces;
    }

    public void setUserAcces(String userAcces) {
        this.userAcces = userAcces;
    }

}

LoginController

@Path("/log")
public class LoginController {

    private static Logger logger = Logger.getLogger(LoginController.class);

    @PersistenceContext
    private EntityManager em;

    @EJB
    UserDao userDao;
    UserData userData = new UserData();
...

UserDao

@Stateless
@ManagedBean
public class UserDao {

    @PersistenceContext
    EntityManager em;

    public UserData addNew(UserData userData) {
        em.persist(userData);
        return userData;
    }

login

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:body>
    <ui:composition template="/templates/main.xhtml">
        <ui:define name="content">
            <h3>Register Form</h3>
            <h:form>
                <h:panelGrid columns="3">
            <h:outputLabel value="Name: " for="userName"/>
                <h:inputText id="userName" label="userName" required="true" value="#{userData.userName}"/>
                <h:message for="userName"/>
                <h:outputLabel value="Secend Name: " for="userSName"/>
                <h:inputText id="userSName" label="userSName" required="true" value="#{userData.userSName}"/>
                <h:message for="userSName"/>
                <h:outputLabel value="Login: " for="userLogin"/>
                <h:inputText id="userLogin" label="userLogin" required="true" value="#{userData.userLogin}"/>
                <h:message for="userLogin"/>
                <h:outputLabel value="Mail Adress: " for="userMail"/>
                <h:inputText id="userMail" label="userMail" required="true" value="#{userData.userMail}"/>
                <h:message for="userMail"/>
                    <h:commandButton value="Save" action="#{loginController.addNewUser}"/>
                </h:panelGrid>
            </h:form>
        </ui:define>
    </ui:composition>
</h:body>
</html>

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="ExampleDS">
        <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/>
            <property name="javax.persistence.jdbc.user" value="sa" />
            <property name="javax.persistence.jdbc.password" value="sa" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>
</persistence> 
3

Generalnie straszny bałagan
1.

@Entity
@Table
@SessionScoped
@ManagedBean
public class UserData

Straszna lipa, że encja jest managedBeanem (wywal to. tzn @SessionScoped @ManagedBean)
Wtedy na potrzeby widoku stwórz specjalną klasę dla danych, które wyświetlasz na widoku i niech ta klasa przejmie tę rolę.

  1. LoginController ma entity managera, kolejny WTF, wywal entity managera i w controlerze wywołuj metodę z UserDao (tam jest miejsce na entity managera i operacje na bazie). (Znaczy teoretycznie to controller powinien być do obsługi widoku, do logiki jakiś sevice, do bazy DAO)

  2. Wywal @ManagedBean w UserDao

  3. Generalnie ja bym skorzystała z CDI, managedBeany odchodzą do lamusa (znaczy w aktualnym standardzie javy jeszcze są managed beany, stąd w dokumentacji znajdziesz tą adnotację, ale w praktyce to CDI się używa). Czyli zalecam zamianę na @named i wtedy Scope z odpowiedniego pakietu czyli javax.enterprise.context.SessionScoped;

Co do błędu, to jakoś nie widzę tego, ja to zawsze jak nie wiem co nie działa to wyrzucam zawartość strony i sprawdzam czy dla "pustej" też się wypieprza. Ewentualnie wygooglaj po błędzie.

0

@szarotka dziękuje za odpowiedz. jest mega pomocna

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