Как передать значение (выбранное из selectOneMenu) со страницы JSF на другую

#jsf

#jsf

Вопрос:

Я хочу заполнить selectOneMenu полями из моей базы данных, а затем использовать выбранное значение в другом запросе SQL. Для справки, у меня есть selectOneMenu, заполненный моими данными, но я не знаю, как извлечь выбранное значение и отобразить его на другой странице. Ошибка такова: org.apache.jasper.JasperException: произошло исключение при обработке страницы JSP / Result.jsp Stacktrace: в org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553) в org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper .java:442)

Также я хочу написать чистый код, я хочу создать класс connection и использовать его для подключения один раз на первой странице и отключения на последней странице (когда я закончу).

Компонент:

 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;
}
}
  

Первая страница 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>
  

Вторая страница JSF:

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

</body>
  

Конфигурация Faces:

 <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>
  

Подключение к классу:

 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;
}
  

Весь 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 javax.faces.component.UIViewRoot@144c984 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 javax.faces.component.UIViewRoot@144c984 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
  

Комментарии:

1. Хотя код не раскрывает лучшие практики, он должен просто работать. С какой проблемой вы столкнулись? Что происходит вместо этого, когда вы нажимаете кнопку? Или ваш реальный вопрос на самом деле (в отличие от того, что вы задали в заголовке) «Пожалуйста, просмотрите и перепишите этот код для меня»?

2. Вы отредактировали вопрос, чтобы добавить сообщение об исключении и Connection класс. Но это бесполезно без всей трассировки стека. Отслеживание стека с указанием основной причины (ов) является наиболее важной частью исключения. Именно в нем содержится ответ. Пожалуйста, также обратите внимание на правила форматирования кода, ваш Connection код класса отформатирован неправильно.

Ответ №1:

Наконец, есть основная причина исключения:

Вызвано: java.lang.Исключение IllegalStateException: компонент javax.faces.component.UIViewRoot@144c984 не ожидаемый тип. Ожидается: javax.faces.component.uiOutput. Возможно, вам не хватает тега?

Вы забыли <f:view> в Result.jsp . Все компоненты JSF должны находиться внутри <f:view> . Отредактируйте свой Result.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 lang="en">
        <head>
            <title>JSP page</title>
        </head>
        <body>
            <h:outputText value="JSF components here." />
        </body>
    </html>
</f:view>