2011-06-07 2 views
1

Je souhaite remplir un selectOneMenu avec des champs de ma base de données puis utiliser la valeur choisie dans une autre requête SQL. Pour savoir que mon selectOneMenu est rempli à partir de mes données, mais je ne sais pas comment récupérer la valeur choisie et le montrer dans une autre page. L'erreur est: org.apache.jasper.JasperException: Une exception est survenue traitement page JSP /Result.jsp Stacktrace: à org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:553) à org .apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:442)Comment passer une valeur (sélectionnée de selectOneMenu) de la page JSF à une autre

Je veux aussi écrire un code propre, je veux créer une connexion de classe et l'utiliser pour se connecter une seule fois dans la première page et passe oublié Déconnexion à la dernière page (quand j'ai fini).

Bean:

public class BeanTools { 

    private List<SelectItem> mesElements; 
    private String maValeur; 
    public PreparedStatement st; 
    Connectionx con = new Connectionx(); **//IF I do that on N page I will have N connection!!** 
    Connection cx = (Connection) con.Connx(); 

     public BeanTools() { 
    }  

    public String getMaValeur() { 
     return maValeur; 
    } 

    public void setMaValeur(String maValeur) { 
     this.maValeur = maValeur; 
    } 

    public void setMesElements(List<SelectItem> mesElements) { 
     this.mesElements = mesElements; 
    } 




public Iterable<String> remplireItem() throws ClassNotFoundException, SQLException 
    { 

String sql; 
sql ="select issuestatus.pname from issuestatus;"; 
System.out.println("sql"); 
st=(PreparedStatement) cx.prepareStatement(sql); 
ResultSet rs1 = st.executeQuery();System.out.println("execute"); 

String nbb; 
ArrayList<String> list = new ArrayList<String>(); 
while(rs1.next()) 
     { 
      nbb = rs1.getString("pname"); 
      System.out.println(nbb); 
      list.add(nbb); 
      System.out.println("list"+list.toString()); 
     } 


return list; 
    } 


public List<SelectItem> getMesElements() throws SQLException, ClassNotFoundException { 

if (mesElements == null) { 
mesElements = new ArrayList<SelectItem>(); 
for (String val : remplireItem()) { 
mesElements.add(new SelectItem(val)); 
} 
} 
return mesElements; 
} 
} 

Première page JSF:

<h:form id="form">  
Issue status 2 :<h:selectOneMenu style="width:200px" value="#{BeanTools.maValeur}" > 
    <f:selectItems value="#{BeanTools.mesElements}"/> 
       </h:selectOneMenu> 

<h:commandButton action="submit" value="submit"/> 
</h:form> 

Deuxième page JSF:

<body>  
     <h:outputText value="#{BeanTools.maValeur}" /> 

</body> 

Les visages config:

<managed-bean> 
<managed-bean-name>BeanTools</managed-bean-name> 
<managed-bean-class>KPIs.BeanTools</managed-bean-class> 
<managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

<navigation-rule> 
<from-view-id>/welcomeJSF.jsp</from-view-id> 
<navigation-case> 
<from-outcome>submit</from-outcome> 
<to-view-id>/Result.jsp</to-view-id> 
</navigation-case> 
</navigation-rule> 

Classe Connection:

public class Connectionx { 

public Connection cx=null; 
public Statement st; 

public Connectionx() {} 

public Connection Connx() 
{ 

    System.out.println("enregister le driver"); 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } 
     catch(Exception ex) 
       { 
       System.err.println("Erreur lors du chargement du driver"+ex.getMessage()); 


       } 


     try { 
      /** Connection */ 
      cx = (Connection) DriverManager.getConnection   ("jdbc:mysql://localhost/jiradb","",""); 

       } 
       catch(SQLException ex) 
       { 
      System. err. println("Error ")    } 
    return cx; 
} 

L'ensemble stacktrace:

org.apache.jasper.JasperException: An exception occurred processing JSP page /Result.jsp at line 19 

16:  <body> 
17:   <h1>Hello World!</h1> 
18:  
19:   <h:outputText value="#{BeanTools.maValeur}" /> 
20:   
21:  </body> 
22: </html> 


Stacktrace: 
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:442) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
    at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:546) 
    at com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:363) 
    at com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:154) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.IllegalStateException: Component [email protected] not expected type. Expected: javax.faces.component.UIOutput. Perhaps you're missing a tag? 
    at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:907) 
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840) 
    at org.apache.jsp.Result_jsp._jspService(Result_jsp.java:84) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
    ... 38 more 
Caused by: java.lang.IllegalStateException: Component [email protected] not expected type. Expected: javax.faces.component.UIOutput. Perhaps you're missing a tag? 
    at com.sun.faces.taglib.html_basic.OutputTextTag.setProperties(OutputTextTag.java:126) 
    at javax.faces.webapp.UIComponentClassicTagBase.findComponent(UIComponentClassicTagBase.java:690) 
    at javax.faces.webapp.UIComponentClassicTagBase.doStartTag(UIComponentClassicTagBase.java:1311) 
    at com.sun.faces.taglib.html_basic.OutputTextTag.doStartTag(OutputTextTag.java:163) 
    at org.apache.jsp.Result_jsp._jspx_meth_h_005foutputText_005f0(Result_jsp.java:103) 
    at org.apache.jsp.Result_jsp._jspService(Result_jsp.java:73) 
    ... 41 more 
+0

Bien que le code n'expose pas les meilleures pratiques, il devrait simplement fonctionner. Quel est le problème auquel vous êtes confronté? Que se passe-t-il lorsque vous appuyez sur le bouton? Ou est votre vraie question * réellement * (contrairement à ce que vous avez demandé dans le titre) "S'il vous plaît examiner et réécrire ce code pour moi"? – BalusC

+0

Vous avez modifié la question pour ajouter le message d'exception et la classe 'Connection'. Mais cela ne sert à rien sans la pile complète. La pile avec les causes premières est la partie la plus importante de l'exception. Il contient la réponse. Veuillez également faire attention aux règles de formatage du code, votre code de classe 'Connection' n'est pas correctement formaté. – BalusC

Répondre

3

Enfin, il y a la cause de l'exception:

Causée par: java.lang.IllegalStateException: javax Component .faces.component.UIViewRoot @ 144c984 type non attendu. Attendu: javax.faces.component.UIOutput. Peut-être que vous manquez une étiquette?

Vous avez oublié le <f:view> dans Result.jsp. Tous les composants JSF doivent aller à l'intérieur d'un <f:view>. Modifiez votre Result.jsp afin qu'il ressemble au modèle de base suivant:

<%@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 lang="en"> 
     <head> 
      <title>JSP page</title> 
     </head> 
     <body> 
      <h:outputText value="JSF components here." /> 
     </body> 
    </html> 
</f:view> 
+0

Merci beaucoup et je suis désolé pour le manque de clarté – rym

+0

De rien. A-t-il résolu le problème? Puisque vous êtes nouveau ici, s'il vous plaît n'oubliez pas de marquer la réponse la plus utile acceptée lorsque votre problème est résolu. Voir aussi http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 – BalusC

+0

oui mon problème est résolu :) – rym

Questions connexes