JSF odwołanie do komponentów

0

Zaczyna naukę JSF i pierwsze co mnie zastanawia i czego nie moge ogarnac to odwołania do komponentów. W JSE nie było z tym problemów.

 
private JTextField poleLogin;
private JButton Dodaj;
private List<Uzytkownik> uzytkownicy = new ArrayList<Uzytkownik>();

public void actionPerformed(ActionEvent arg0) 
{
Uzytkownik u = new Uzytkownik(poleLogin.getText());;
uzytkownicy.add(u);
}

i uzytkownik dodany.Natomiast przy JSF brakuje mi wiedzy jaki jest najlepszy sposób odwoływania sie do komponentów. Java to jest mądry jezyk i nie wierze, że jest to bardziej skomplikowane niz w JSE. W jaki sposób majac (ArrayList uzytkownicy stworzona jest w klasie UzytkownikBean ) dodac uzytkownika do listy-jak powinna wygladac metoda dodawania ?

 
<p:inputText id="polLogin"></p:inputText>
<h:commandButton id="PrzyciskStworzUzytkownika"></h:commandButton>
0

Wymysliłem cos takiego ale niestety nie działa a siedze juz dobrych godzin. Prośba do kogoś żeby znalazł chwilke do przeanalizowania tego i odpisania co boli ten kod, że nie dodaje do listy uzytkownikow. Ponizej wrzucam kod:

Klasa Uzytkownik

 
public class Uzytkownik 
{
	private String imie;
	private String nazwisko;
	private String plec;
	private String adresEmail;
	private String login;
	private String haslo;
	private List<InformacjeOUzytkowniku> informacje;  
	private List<Cwiczenie> ulubioneCwiczenia;
	
	
	
	
	
public Uzytkownik(String login, String haslo, String imie, String nazwisko,
			String adresEmail,String plec) 
{
		super();
		this.imie = imie;
		this.nazwisko = nazwisko;
		this.plec = plec;
		this.adresEmail = adresEmail;
		this.login = login;
		this.haslo = haslo;
	}
	

	public String getImie() {
		return imie;
	}
	public void setImie(String imie) {
		this.imie = imie;
	}
	public String getNazwisko() {
		return nazwisko;
	}
	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}
	public String getPlec() {
		return plec;
	}
	public void setPlec(String plec) {
		this.plec = plec;
	}
	public String getAdresEmail() {
		return adresEmail;
	}
	public void setAdresEmail(String adresEmail) {
		this.adresEmail = adresEmail;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getHaslo() {
		return haslo;
	}
	public void setHaslo(String haslo) {
		this.haslo = haslo;
	}
	public List<InformacjeOUzytkowniku> getInformacje() {
		return informacje;
	}
	public void setInformacje(List<InformacjeOUzytkowniku> informacje) {
		this.informacje = informacje;
	}
	public List<Cwiczenie> getUlubioneCwiczenia() {
		return ulubioneCwiczenia;
	}
	public void setUlubioneCwiczenia(List<Cwiczenie> ulubioneCwiczenia) {
		this.ulubioneCwiczenia = ulubioneCwiczenia;
	}
	
}

Klasa UzytkownikBean

 
@ManagedBean
@SessionScoped
public class UzytkownikBean 
{
private Uzytkownik uzytkownik;	
private ListDataModel<Uzytkownik> modelUzytkownicy = new ListDataModel<Uzytkownik>();

public ListDataModel<Uzytkownik> getModelUzytkownicy() {
	return modelUzytkownicy;
}

public void setModelUzytkownicy(ListDataModel<Uzytkownik> modelUzytkownicy) {
	this.modelUzytkownicy = modelUzytkownicy;
}

public UzytkownikBean()
{
this.odswiezModelUzytkownicy();		
}

public void odswiezModelUzytkownicy()
{
	modelUzytkownicy.setWrappedData(DAO.getInstatncja().getUzytkownicy());
}

public void dodajUzytkownika(ActionEvent evt)
{
	
	DAO.getInstatncja().getUzytkownicy().add(uzytkownik);
	this.odswiezModelUzytkownicy();	
}
}

Widok:

 
<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui" >

<ui:composition template="szablon.xhtml">
	
<ui:define name="content">
	 
	  		
     
	  				
	 	  <h:panelGrid id="panelDodawaniaUzytkownika" columns="2">
	 	 			
		 		 <p:outputLabel id="etykietaLogin" value="login">
				  </p:outputLabel>
				  <p:inputText id="polLogin" styleClass="polaWprowadzaniaNowyUzytkownik" value="#{uzytkownik.login}"></p:inputText>
				  
				  <p:outputLabel id="etykietaHaslo" value="hasło">
				  </p:outputLabel>
				  <p:inputText id="polHasl" styleClass="polaWprowadzaniaNowyUzytkownik" value="#{uzytkownik.haslo}"></p:inputText>
				  
				  <p:outputLabel id="etykietaImie" value="imie">
				  </p:outputLabel>
				  <p:inputText id="polImie" styleClass="polaWprowadzaniaNowyUzytkownik" value="#{uzytkownik.imie}"></p:inputText>
				  
				  <p:outputLabel id="etykietaNazwisko" value="nazwisko">
				  </p:outputLabel>
				  <p:inputText id="polNazwisko" styleClass="polaWprowadzaniaNowyUzytkownik" value="#{uzytkownik.nazwisko}"></p:inputText>
				  
				  <p:outputLabel id="etykietaEmail" value="e-mail">
				  </p:outputLabel>
				  <p:inputText id="polEmail" styleClass="polaWprowadzaniaNowyUzytkownik" value="#{uzytkownik.adresEmail}"></p:inputText>
				  
				  <br />
				  <p:selectOneRadio id="poleWyboruKM" layout="pageDirection" >
		   				<f:selectItem itemValue="Kobieta" itemLabel="Kobieta" value="#{uzytkownik.plec}" />
		   				<f:selectItem itemValue="Mezczyzna" itemLabel="Mezczyzna" value="#{uzytkownik.plec}"/>	   			
				  </p:selectOneRadio>
				  
				  <br />
				  <br /><br />
				  
       <h:form>
				  <h:panelGroup>
				  <br />
				 
				    	<h:commandButton id="PrzyciskStworzUzytkownika" image="resources/obrazki/dodaj.png" actionListener="uzytkownikBean.dodajUzytkownika">
				 	</h:commandButton>
				  		
				  	<f:verbatim>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</f:verbatim>
				  		
				  	<h:commandButton id="PrzyciskCzyscDane" image="resources/obrazki/zmien.png" type="reset">
				 	</h:commandButton>
				 		
				 	<br />
				 	<br />
				 		
				  		
				  		
				  </h:panelGroup>
	</h:form>	

 	</h:panelGrid>

1

Na moje oko toto to w ogóle jest źle. Klasa użytkownik ok, ale dalej to nie rozumiem. Bean UzytkownikBean skąd się to DAO nagle wzięło w klasie jak nie jest nigdzie zadeklarowane i co to za ActionEvent? Według mnie dodajUzytkownika powinno wyglądać mniej więcej tak:

public void dodajUzytkownika()
{
 
    modelUzytkownicy.add(uzytkownik); 
}

i tyle wystarczy.

Czemu w widoku form łapie tylko przyciski? On powinien być przed

<h:panelGrid id="panelDodawaniaUzytkownika" columns="2">

Do pola użytkownik w beanie nie odwołujesz się tak:

value="#{uzytkownik.login}"

tylko value="#{uzytkownikBean.uzytkownik.login}"

W ogóle mógłbyś napisać coś o jakichś błędach jakie Ci się wyświetlają. Skorzystaj z jakiegoś tutoriala wpisuj np. jsf CRUD example. Wyskakują jakieś pozycje, z których możesz skorzystać. W ogóle moim zdaniem nie ma co się wzbraniać przed JPA. Napisanie prostego CRUDa używając EJB, JSF i JPA za jednym razem nie jest naprawdę takie straszne.
0

Tak wyskakuje sporo ciekawych tutoriali jezeli wpisze CRUD JSF JPA - przeanalizuje to, dołączę baze do projektu i dopiero wtedy wrócę do obsługą zdarzeń w JSF :)

0

Wiem juz jak polaczyc JPA i JSF wiec teraz pytanie. Jak poprawnie powinno wygladac dodawanie uzytkownika. Na ta chwile mam tak , ale nie działa.

Klasa gdzie mam stworzonego nowego uzytkownika

 
package pl.konrad.bean;

import java.awt.event.ActionEvent;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import pl.konrad.klasy.Uzytkownik;

@ManagedBean
@SessionScoped
public class UzytkownikBean {
	private Uzytkownik uzytkownik = new Uzytkownik();
	private ListDataModel<Uzytkownik> modelUzytkownicy = new ListDataModel<Uzytkownik>();

	public Uzytkownik getUzytkownik() {
		return uzytkownik;
	}

	public void setUzytkownik(Uzytkownik uzytkownik) {
		this.uzytkownik = uzytkownik;
	}

	public ListDataModel<Uzytkownik> getModelUzytkownicy() {
		return modelUzytkownicy;
	}

	public void setModelUzytkownicy(ListDataModel<Uzytkownik> modelUzytkownicy) {
		this.modelUzytkownicy = modelUzytkownicy;
	}

	public UzytkownikBean() {
		this.odswiezModelUzytkownicy();
	}

	public void odswiezModelUzytkownicy() {

	}

	public void dodajUzytkownika() {
		EntityManagerFactory entityManagerFactory = Persistence
				.createEntityManagerFactory("HealthHelper");

		EntityManager entityManager = entityManagerFactory
				.createEntityManager();

		entityManager.getTransaction().begin();
		entityManager.persist(uzytkownik);
		entityManager.getTransaction().commit();

		entityManager.close();
		entityManagerFactory.close();

	}

}

oraz plik xhtml

 

		<h:panelGrid columns="2">
			<h:form>
				<h:panelGrid id="panelDodawaniaUzytkownika" columns="2">

					<p:outputLabel id="etykietaLogin" value="login">
					</p:outputLabel>
					<p:inputText id="polLogin" styleClass="polaWprowadzania"
						value="#{uzytkownikBean.uzytkownik.login}"></p:inputText>

					<p:outputLabel id="etykietaHaslo" value="hasło">
					</p:outputLabel>
					<p:inputText id="polHasl" styleClass="polaWprowadzania"
						value="#{uzytkownikBean.uzytkownik.haslo}"></p:inputText>

					<p:outputLabel id="etykietaImie" value="imie">
					</p:outputLabel>
					<p:inputText id="polImie" styleClass="polaWprowadzania"
						value="#{uzytkownikBean.uzytkownik.imie}"></p:inputText>

					<p:outputLabel id="etykietaNazwisko" value="nazwisko">
					</p:outputLabel>
					<p:inputText id="polNazwisko" styleClass="polaWprowadzania"
						value="#{uzytkownikBean.uzytkownik.nazwisko}"></p:inputText>

					<p:outputLabel id="etykietaEmail" value="e-mail">
					</p:outputLabel>
					<p:inputText id="polEmail" styleClass="polaWprowadzania"
						value="#{uzytkownikBean.uzytkownik.adresEmail}"></p:inputText>

					<br />
					<p:selectOneRadio id="poleWyboruKM" layout="pageDirection">
						<f:selectItem itemValue="Kobieta" itemLabel="Kobieta"
							value="#{uzytkownikBean.uzytkownik.plec}" />
						<f:selectItem itemValue="Mezczyzna" itemLabel="Mezczyzna"
							value="#{uzytkownikBean.uzytkownik.plec}" />
					</p:selectOneRadio>

					<br />
					<br />
					<br />

					<h:panelGroup>
						<br />

						<h:commandButton id="PrzyciskStworzUzytkownika"
							image="resources/obrazki/dodaj.png"
							action="uzytkownikBean.dodajUzytkownika">
						</h:commandButton>

						<f:verbatim>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</f:verbatim>

						<h:commandButton id="PrzyciskCzyscDane"
							image="resources/obrazki/zmien.png" type="reset">
						</h:commandButton>

						<br />
						<br />



					</h:panelGroup>

				</h:panelGrid>
			</h:form>
 			
0

Dostaje ponizszy błąd. Ktoś podpowie o co moze biegac z tym dodaniem uzytkownika?

bbbbbb.PNG

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