java ee jsf tworzenie obiektu

0

Witam. Mam problem z tworzeniem obiektu ale tylko wtedy gdy stworzę stronę z rozszerzeniem .jsp gdy tworzę .xhtml obiekt się tworzy. Na stronie jsp po zatwierdzeniu formularza wyskakuje błąd "Target Unreachable, 'null' returned null".
Z góry dzięki za pomoc i wskazówki.

mój koda wygląda tak:
strona jsp

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
 
<!DOCTYPE Html>

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                <title>JSP Page</title>
        </head>
       
        <body>      
     <h:form>
         <h:panelGrid columns="2">
                <h:outputLabel value="Model: "/>
                <h:inputText value="#{produktyManagedBean.produkt.model}"/>
                 <h:outputLabel value="cena: "/>
                 <h:inputText value="#{produktyManagedBean.produkt.cena}"/>
                  <h:outputLabel value="Opis: "/>
                  <h:inputTextarea value="#{produktyManagedBean.produkt.opis}"/>
                  <h:commandButton value="Utwórz produkt" action="#{produktyManagedBean.stworzProdukt()}"/>
            </h:panelGrid>
            </h:form>
        </body>
    </html>
</f:view>

strona xhtml

<?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:f="http://java.sun.com/jsf/core">
    
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        <h:form>
         <h:panelGrid columns="2">
                <h:outputLabel value="Model: "/>
                <h:inputText value="#{produktyManagedBean.produkt.model}"/>
                 <h:outputLabel value="cena: "/>
                 <h:inputText value="#{produktyManagedBean.produkt.cena}"/>
                  <h:outputLabel value="Opis: "/>
                  <h:inputTextarea value="#{produktyManagedBean.produkt.opis}"/>
                  <h:commandButton value="Utwórz produkt" action="#{produktyManagedBean.stworzProdukt()}"/>
            </h:panelGrid>
            </h:form>
    </h:body>
</html> 

MenagedBean

@ManagedBean
@SessionScoped
public class ProduktyManagedBean {
@EJB
ProduktySessionBean produktySessionBean;
private int idProduktu;
private Produkty produkt;

    public int getIdProduktu() {
        return idProduktu;
    }

    public void setIdProduktu(int idProduktu) {
        this.idProduktu = idProduktu;
    }

    public Produkty getProdukt() {
        return produkt;
    }

    public void setProdukt(Produkty produkt) {
        this.produkt = produkt;
    }
    public void init(){
        produkt = new Produkty();
    }
    
    public String stworzProdukt(){
        produktySessionBean.stworzProdukt(produkt);
        return null;
    }

    public ProduktySessionBean getProduktySessionBean() {
        return produktySessionBean;
    }

    public void setProduktySessionBean(ProduktySessionBean produktySessionBean) {
        this.produktySessionBean = produktySessionBean;
    } 

SessinBean

 
@Stateless
public class ProduktySessionBean {

   @PersistenceContext 
           private EntityManager em;
  
   public void stworzProdukt(Produkty produkt){
       em.persist(produkt);
   }
   
}
0

To nie pomogło ale doszedłem do czegoś. Na stronie xhtml muszę dodać coś takiego

<f:metadata>
        <f:viewParam name="idProduktu" value="#{produktyManagedBean.idProduktu}" />
      
        <f:event type="preRenderView" listener="#{produktyManagedBean.init()}"/>
    </f:metadata>
 

Podejrzewam że chodzi o wywołanie metody init() w momencie przesłania parametrów ale nie mogę tego zrobić na stronie jsp ponieważ nie ma znacznika <f:event> czy jest jakiś odpowiednik tego znacznika na stronie jsp?

0

Każda strona, którą zamieściłeś to strona JSF, nie ma tu JSP :). To są 2 różne biblioteki i lepiej ich nie mieszać razem :)

0

ok ale chodziło o rozszerzenie nie wiedziałem jak to ująć. Dziwne że na jednej stronie mogę użyć znacznika f:event a na drugiej nie.

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