JSF View Parameter auslesen

Rallenaldo

Mitglied
Hi.

Ich habe eine Frage bezüglich der View Parameter. Ich habe folgendes Problem:

Ich will über einen Link einen bestimmten Datensatz aus der Datenbank auslesen. Wenn ich auf einen Link klicke, erscheint in der Adresszeile meines Browsers die korrekte URL, allerdings wird der Datensatz nicht auf der Seite angezeigt. Ich benutze hierfür folgende Klassen bzw. Views:

Klasse CompanySiteController:

Java:
package de.zerrenda.zerrendaee6.controller;

import de.zerrenda.zerrendaee6.entities.Company;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Named
@SessionScoped
public class CompanySiteController implements Serializable{
    
    @PersistenceContext(unitName="ZerrendaPU")
    EntityManager em;

    private int companyId;
    private Company company;

    public int getCompanyId() {
        return companyId;
    }

    public void setCompanyId(int id) {
        this.companyId = id;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public String goToCompanySite(int id){
        
        setCompanyId(id);
        
        company = em.find(Company.class, getCompanyId());
                
        return "/Sites/companyHome.xhtml";
    }
    
    
}

View1: Index.xhtml

HTML:
<?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:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

    <body>

        <ui:composition template="./META-INF/templates/template.xhtml">

            <ui:define name="left">
                left
            </ui:define>

            <ui:define name="right">
                right              
            </ui:define>

            <ui:define name="content">
            <p align="center">Zerrenda Logo</p>
		<div align="center">
			<h:form>
				<h:panelGrid columns="2">
					<p:inputText id="suchfeld" size="80" />
					<p:commandButton value="Suche"/>
				</h:panelGrid>
			</h:form>
		</div>

		<div align="center">
			<h:form>
				<h:panelGrid columns="3">
                                    <p:dataTable value="#{companyListProducer.latest5Companys}" var="latest">
						<p:column>
							<f:facet name="header">
								<h:outputText value="Neueste Einträge" />
							</f:facet>
                                                    <h:link outcome="companyHome" value="#{latest.companyId}">
                                                        <f:param name="companyId" value="#{latest.companyId}"/>
                                                    </h:link>
						</p:column>
					</p:dataTable>
					<p:dataTable>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Häufigste Produktgruppen" />
							</f:facet>
						</p:column>
					</p:dataTable>
					<p:dataTable>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Häufigste Suchbegriffe" />
							</f:facet>
						</p:column>
					</p:dataTable>
				</h:panelGrid>
			</h:form>
		</div>
            </ui:define>

        </ui:composition>

    </body>
</html>

View2: companyHome.xhtml

HTML:
<?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:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    
    <f:metadata>
        <f:viewParam name="companyId" value="#{companySiteController.companyId}"></f:viewParam>
    </f:metadata>

    <h:head>
        <title>Zerrenda #{companySiteController.company.companyName}</title>
    </h:head>
    <body>

        <ui:composition template="./../META-INF/templates/template.xhtml">

            <ui:define name="content">
                CompanyId = <h:outputText value="#{companySiteController.companyId}" />
            </ui:define>

        </ui:composition>

    </body>
</html>

Könnt ihr mir bei dem Problem helfen und einen Denkanstoß geben?
 
Soweit ich das erkennen kann, rufst du mit dem Link eine Methode der Klasse "companyListProducer" auf. Kannst du die auch noch mal posten? Nutzt du keine Interfaces?
 
Hi. Hier ist der Code vom CompanyListProducer

Java:
package de.zerrenda.zerrendaee6.data;

import de.zerrenda.zerrendaee6.entities.Company;
import de.zerrenda.zerrendaee6.entities.User;
import de.zerrenda.zerrendaee6.qualifiers.Added;
import de.zerrenda.zerrendaee6.qualifiers.Deleted;
import de.zerrenda.zerrendaee6.qualifiers.Updated;
import de.zerrenda.zerrendaee6.services.CompanyService;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

@Named
@RequestScoped
public class CompanyListProducer {
    
    @PersistenceContext(unitName="ZerrendaPU")
    private EntityManager em;
    
    @Inject
    private CompanyService companyService;
    
    @PostConstruct
    public void init(){
        
        company = companyService.getAllCompanys();
        latest5Companys = companyService.getLatest5Companys();
    }
    
    private List<Company> company;
    private List<Company> latest5Companys;
    private User user;
    private String searchedCompanyName;
    private int searchedCompanyZipCode;

    public List<Company> getCompany() {
        return company;
    }

    public void setCompany(List<Company> company) {
        this.company = company;
    }

    public List<Company> getLatest5Companys() {
        return latest5Companys;
    }

    public void setLatest5Companys(List<Company> latest5Companys) {
        this.latest5Companys = latest5Companys;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getSearchedCompanyName() {
        return searchedCompanyName;
    }

    public void setSearchedCompanyName(String searchedCompanyName) {
        this.searchedCompanyName = searchedCompanyName;
    }

    public int getSearchedCompanyZipCode() {
        return searchedCompanyZipCode;
    }

    public void setSearchedCompanyZipCode(int searchedCompanyZipCode) {
        this.searchedCompanyZipCode = searchedCompanyZipCode;
    }
        
    public void onCompanyAdded(@Observes @Added Company company){
        companyService.addCompany(company);
    }
    
    public void onCompanyUpdated(@Observes @Updated Company company){
        companyService.updateCompany(company);
    }
    
    public void onCompanyDeleted(@Observes @Deleted Company company){
        companyService.deleteCompany(company);
    }
    
    public List<Company> getCompanyByUserId(User user){
        
        TypedQuery<Company> query = em.createNamedQuery("Company.findByUserId", Company.class);
        company = query.setParameter("userId", user.getUserId()).getResultList();
        
        return company;
    }
    
    public void getCompanyByCompanyName(){
        
        TypedQuery<Company> query = em.createNamedQuery("Company.findByCompanyName", Company.class);
        company = query.setParameter("companyName", searchedCompanyName).getResultList();
    }
    
    public void getCompanyByCompanyZipCode(){
        
        TypedQuery<Company> query = em.createNamedQuery("Company.findByCompanyZipCode", Company.class);
        company = query.setParameter("companyZipCode", searchedCompanyZipCode).getResultList();
    }
    
}
 

Neue Themen


Zurück
Oben