Résolu Remplir un selectOneMenu à partir d'une BD oracle

Solutions (10)
Tags :
  • Oracle
  • sun
  • Arraylist
  • Java
  • Programmation
|
Salut
j'ai une liste déroulante que je veux la remplir via une base de donnée oracle
mais un message d'erreur s'affiche:

  1. An Error Occurred:
  2. Cannot convert [javax.faces.model.SelectItem@61d27a] of type class java.util.ArrayList to class javax.faces.model.SelectItem
  3.  
  4.  
  5. java.lang.IllegalArgumentException: Cannot convert [javax.faces.model.SelectItem@61d27a] of type class java.util.ArrayList to class javax.faces.model.SelectItem
  6. at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:397)
  7. at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:222)
  8. at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
  9. at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
  10. at javax.faces.component.UISelectItem.getValue(UISelectItem.java:231)
  11. at com.sun.faces.renderkit.SelectItemsIterator.initializeItems(SelectItemsIterator.java:189)
  12. at com.sun.faces.renderkit.SelectItemsIterator.hasNext(SelectItemsIterator.java:135)
  13. at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:760)
  14. at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:842)
  15. at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:296)
  16. at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
  17. at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
  18. at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
  19. at com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:420)
  20. at com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:209)
  21. at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
  22. at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
  23. at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
  24. at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
  25. at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
  26. at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
  27. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
  28. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
  29. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
  30. at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
  31. at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
  32. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
  33. at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
  34. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
  35. at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
  36. at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
  37. at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
  38. at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
  39. at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
  40. at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
  41. at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
  42. at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
  43. at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
  44. at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
  45. at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
  46. at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
  47. at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
  48. at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
  49. at java.lang.Thread.run(Thread.java:619)


voici mon bean:



  1. import java.sql.SQLException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.faces.model.SelectItem;
  5.  
  6. import java.sql.*;
  7. import java.sql.DriverManager;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10. /*
  11. * To change this template, choose Tools | Templates
  12. * and open the template in the editor.
  13. */
  14.  
  15.  
  16. /**
  17. *
  18. * @author utilisateur
  19. */
  20. public class Monbean {
  21. private String maValeur;
  22. Connection con ;
  23. private List<SelectItem> mesElements;
  24.  
  25.  
  26. public String getmaValeur() {
  27. return maValeur;
  28. }
  29.  
  30. public void setmaValeur(String maValeur) {
  31. this.maValeur = maValeur;
  32. }
  33. private Iterable<String> getMaliste() throws SQLException {
  34. ArrayList unelist = new ArrayList();
  35.  
  36.  
  37.  
  38.  
  39. try
  40. {
  41. Class.forName("oracle.jdbc.driver.OracleDriver");
  42. System.out.println ("driver etablie");
  43. }
  44. catch(Exception e)
  45. {
  46. System.out.println ("erreur:Driver int" +
  47. "rouvable");
  48. }
  49.  
  50.  
  51.  
  52.  
  53. try
  54.  
  55. {
  56. String URL = "jdbc:oracle:thin:@***:1521:****";
  57. String USER = "****";
  58. String PASSWD = "*****";
  59.  
  60. con =DriverManager.getConnection(URL,USER, PASSWD);
  61. System.out.println ("connexion base pfe etablie");
  62. }
  63. catch(Exception e)
  64. {
  65. System.out.println ("erreur: base introuvable");
  66.  
  67. }
  68.  
  69.  
  70. Statement st = con.createStatement();
  71.  
  72. ResultSet resultats = null;
  73. try {
  74. resultats = st.executeQuery("select * from auteur");
  75. }
  76. catch (SQLException ex) {
  77. Logger.getLogger(Monbean.class.getName()).log(Level.SEVERE, null, ex);
  78. }
  79.  
  80. try {
  81. while(resultats.next()){
  82.  
  83. String num=resultats.getString("nomaut").toString();
  84. unelist.add(num);
  85.  
  86. }
  87. }
  88. //session.close();
  89. catch (Exception e) {
  90. e.printStackTrace();
  91. }
  92. return (List) unelist;
  93. }
  94.  
  95.  
  96. public List<SelectItem> getMesElements() throws SQLException {
  97.  
  98. if (mesElements == null) {
  99. mesElements = new ArrayList<SelectItem>();
  100. for (String val : getMaliste()) {
  101. mesElements.add(new SelectItem(val));
  102. }
  103.  
  104. }
  105. return mesElements;
  106.  
  107. /** Creates a new instance of Monbean */
  108.  
  109.  
  110. }
  111.  
  112. public Monbean() throws SQLException{
  113.  
  114.  
  115. }
  116. }


------------------------------
et dans ma page jsf
j'ai mis
  1. <h:selectOneMenu value=" # {Monbean.maValeur}" >
  2. <f:selectItem value="#{Monbean .mesElements}"/>


Pourriez vous s'il vous plait m'aider à corriger mon code source
je vous remercie

  • Xiiime a édité ce message
  • Xiiime a édité ce message
  • Xiiime a édité ce message
Contenus similaires
Meilleure solution
partage
, Modérateur |
Il faut que tu mettes <f:selectitems .../> au lieu de <f:selectitem .../> parce que tu as plusieurs éléments d'un coup à définir.
  • Commenter cette solution |
Score
0
òh
òi
|
salut,
svp je voudrais remplir avec netbeans un combo-box a partir de la base de données sql java
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par sabar-chan.
  • Commenter cette réponse |
Score
0
òh
òi
|
oui j'ai la valeur mavaleur mais apparament elle est vide.
pour mon cas je récupére cette valeur et je la passe à un rapport pour creer une requete qui prend en considération cette valeur ,apparament elle vide voici comment j'ai fais:


public class BeanSelectItem {

private List<SelectItem> mesElements;
private String maValeur;


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
{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/jiradb", "root", "root");
Statement st = con.createStatement();
String sql= "SELECT pname from issuestatus";
ResultSet rs = st. executeQuery(sql);

String name;
ArrayList<String> list = new ArrayList<String>();
while(rs.next())
{
name= rs.getString("pname");
System.out.println(name);
list.add(name);
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;
}




public String viewReportPDF() throws SQLException, JRException {


Driver monDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(monDriver);
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/jiradb", "root", "root");

JasperDesign jasperDesign = JRXmlLoader.load("C:\\Documents and Settings\\ramoucha\\My Documents\\Jasper_Compilation\\ReportTest.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

//- Paramètres à envoyer au rapport
Map parameters = new HashMap();
parameters.put("maValeur",maValeur );

/***********************************************************************
* Pour afficher une boîte de dialogue pour enregistrer le fichier sous
* le nom rapport.pdf
**********************************************************************/
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, connection);
JasperViewer.viewReport(jasperPrint);
// - Création du rapport au format PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\Documents and Settings\\ramoucha\\My Documents\\Jasper_Compilation\\ReportTest.pdf");


return null;
}



PageJSF:

<f:view>
<html>
<head>
<title>Test iReport With JSF</title>
</head>
<body style="background-color: #fff4db">
<h:form id="reportForm" target="ResultSelect">


Issue status : <h:selectOneMenu value=" #{BeanSelectItem.maValeur}" >
<f:selectItems value="#{BeanSelectItem.mesElements}"/>
</h:selectOneMenu>

<h:commandButton id="pdfButton" value="Visualiser PDF" styleClass="buttonStyle" action="#{BeanSelectItem.viewReportPDF}" />

</h:form>
</body>
</html>
</f:view>
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Et bien tu as ta valeur dans ton bean, non ?
dans monBean.maValeur que tu as set pour le selectOneMenu
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,
Merci bien avec ton code j'ai résolu mon problème ,
je veux te poser un question : comment je peux par la suite récupérer l'option choisi ??
Merci d'avance
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Et bah il suffit que tu fasses un INSERT en SQL sur ta table avec l'ID de l'item sélectionné.
Ne faisant pas trop de Java, je ne peux pas te répondre exactement quoi faire, mais t'as l'idée.
  • Commenter cette réponse |
Score
0
òh
òi
|
Salut
Merci maintenant ça marche en mettant <f:selectitems .../> a la place de <f:selectitem .../>
j'aimerais vous demander encore votre aide si c'est possible
quand je sélectionne l'élément dans le menu comment je peut l'insérer dans une autre table fils
j'explique -- idauteur ( Menu ) est une clé primaire dans la table 'auteur ' (avec laquelle je l'ai rempli ) et c'est une clé étrangère dans la table 'livre ' - comment je peux insérer la valeur sélectionnée à partir de ce menu dans la table 'livre'

Tout conseil serait grandement apprécié
je vous remercie
  • Commenter cette réponse |
Score
0
òh
òi
|
Salut
qu'est ce que vous me proposer pour corriger ça car je veux afficher une liste qui contient les éléments de mon BD et est ce que le problème réside seulement au niveau de <f:selectItem> où il y a quelque chose à modifier dans mon bean surtout au niveau des deux fonctions "getMaliste()" et "getMesElements() "
Pourriez vous m'aider d'avantage s'il vous plait
je vous remercie
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

C'est parce que tu donnes une liste d'éléments à ton <f:selectItem> alors qu'il n'attend qu'une seule valeur.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS