Ich habe eine Webanwendung, die JSF-Seiten und Entitätsklassen verwendet, in denen sich ein Benutzer authentifizieren muss, um einige Übungen für seine Schüler veröffentlichen zu können.JSF übergeben Objektwerte zwischen Controllern
In der Entity-Klasse, ein "user" Objekt hat: id (int), Login (string), Passwort (string) und Typ (string)
In meiner "Benutzer" Controller Bohne, ich habe Eine Methode, um festzustellen, ob der Benutzer bereits in der Datenbank vorhanden ist. Und dieser Prozess läuft gut. Alles funktioniert gut. Also, ich weiß sicher, dass ein "Benutzer" -Objekt mit den richtigen Daten instanziiert wird.
Ich habe einen anderen Controller, der in einer anderen JSF-Seite verwendet wird, wo der Benutzer eine Übung veröffentlichen kann.
In der Entity-Klasse, eine "Übung" Objekt hat: id (int), Benutzer-ID (int) (Fremdschlüssel-ID auf Nutzer), Beschreibung (string) usw.
Wenn ich bin Vorbereitung des "Übung" -Objekts in der "Übungen" -Controller, um in der Datenbank zu speichern, muss ich Zugriff auf das "Benutzer" -Objekt in der anderen Steuerung haben, um die BenutzerID zu setzen. Und das ist der Grund meiner Kopfschmerzen! Weil die userID immer auf null setzt !!!
Ich habe versucht mit @Named und @Inject (empfohlen), auch mit @Managedbean und @ManagedProperty (was sie sagen, wird veraltet sein) ... Versucht mit einzelnen und gemischten Kombinationen von @RequestScoped und @SessionScoped .. Versuchen Sie, das "Benutzer" -Objekt in einer @ PostConstruct-Methode in "Übungen" -Controller instanziiert ... Habe schon viele Beispiele gelesen, wie es geht, aber nichts davon funktioniert!
Ich weiß, das ist ein sehr grundlegendes Problem, das ich habe! Und es besteht nur darin, ein Objekt von einem Controller an einen anderen zu übergeben! Noch kein Erfolg, nach zwei Tagen des Experimentierens! Das macht mich verrückt!
Bitte helfen
!:"Benutzer" Regler
package controlers;
import beans.UtilizadoresFacade;
import entities.Utilizadores;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("utilizadoresController")
@RequestScoped
public class UtilizadoresController implements Serializable {
@EJB
UtilizadoresFacade ejbFacade;
Utilizadores utilizador = new Utilizadores(); //The one i want to pass to the other controller
List<Utilizadores> utilizadores = new ArrayList();
public Utilizadores getUtilizador() {
return utilizador;
}
public void setUtilizador(Utilizadores utilizador) {
this.utilizador = utilizador;
}
public List<Utilizadores> getUtilizadores() {
return utilizadores = (List<Utilizadores>)ejbFacade.consultarUtilizadores();
}
public String verificarUtilizador() { // method to verify the user in database by name and password
utilizadores = (List<Utilizadores>)ejbFacade.consultarUtilizador(utilizador.getNome(), utilizador.getSenha());
if(utilizadores.isEmpty())
return "index.xhtml";
else if(utilizadores.get(0).getTipo().equals("normal")) {
utilizador.setId(utilizadores.get(0).getId()); // Here is where i save the ID to "user" object
return "normal.xhtml";
}
else {
utilizador.setId(utilizadores.get(0).getId());
return "administrador.xhtml";
}
}
public String criarUtilizador(){ // this method is to add new user to database and it works fine.
ejbFacade.adicionarUtilizador(utilizador);
if(utilizador.getTipo().equals("normal"))
return "normal.xhtml";
else
return "administrador.xhtml";
}
}
"Übungen" Controller
package controlers;
import beans.ExerciciosFacade;
import entities.Exercicios;
import entities.Ucs;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named("exerciciosController")
@RequestScoped
public class ExerciciosController implements Serializable {
@EJB
ExerciciosFacade ejbFacade;
@Inject
UtilizadoresController utilizadoresController;
Ucs cadeira = new Ucs(); //this is a discipline
Exercicios exercicio = new Exercicios();
List<Exercicios> exercicios = new ArrayList();
public List<Exercicios> getExercicios(){
return exercicios = (List<Exercicios>)ejbFacade.consultarExercicios();
}
public String criarExercicio(){ // Method to add an exercise to database
exercicio.setUcid(cadeira); // Sets de discipline ID to "exercise" object (another foreign key) and works well because this value comes from a form in JSF page
exercicio.setUtilizadorid(utilizadoresController.getUtilizador()); // This is where i try to set de user ID to "exercise" object
ejbFacade.adicionarExercicio(exercicio);
return "normal.xhtml";
}
public Exercicios getExercicio() {
return exercicio;
}
public void setExercicio(Exercicios exercicio) {
this.exercicio = exercicio;
}
public Ucs getCadeira() {
return cadeira;
}
public void setCadeira(Ucs cadeira) {
this.cadeira = cadeira;
}
}
Ich denke, die "Benutzer" Controller @SessionScoped werden sollte, weil ich sein werde Ich brauche die Benutzerdaten, während er durch die Seiten navigiert, aber ich habe auch @RequestScoped verwendet, damit es nicht mehr Konflikte gibt, die ich nicht kontrollieren kann !!!
Noch eine Sache: Ich arbeite mit Netbeans 8.1 und Java DB auch von Netbeans.
Hoffe ich vergesse nichts!
Vielen Dank im Voraus.
Hey, mit 'Http' bekommen und 'Sitzung. (set/get) Attribut' es funktioniert !!! Groß !!! ** Vinh Ba Tran ** Sie rocken !!! Vielen, vielen Dank! – graundechefe