It seems like this should work, but just as a process of elimination, have you tried removing the rendered feature? Does your "anoPnifaItems" have a blank entry in the list? I noticed that the infamous blank option appears in your list indicating the "SimpleSelectOneRenderer" was unable to set the value. Also, try using strings for your selection item values. When the component evaluates what index was selected it looks at value.equals(item.getValue()) if the class types of these values do not match it will be unable to find the selected index. Also, have you checked the components value and submitted values to see what they are at runtime?
-----Original Message----- From: Francisco Passos [mailto:[EMAIL PROTECTED] Sent: Monday, April 09, 2007 1:26 PM To: [email protected] Subject: RE: Keeping selectOneChoice selection Sure, thank you. I should point out I'm using facelets. Furthermore, some variables are in portuguese, sorry for that. If you find there is something I am doing in a non-standard fashion, please feel free to advise me, since I've only just scraped the surface of JSF and Trinidad. Here's the code then: ------ PAGE CODE: fichaProdConsulta.xhtml ------ <?xml version='1.0' encoding='windows-1252'?> <trh:html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:tr="http://myfaces.apache.org/trinidad" xmlns:trh="http://myfaces.apache.org/trinidad/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jstl/core" xmlns:t="http://myfaces.apache.org/tomahawk" id="htmlid"> <trh:head id="headid"/> <trh:body id="bodyid"> <f:view> <ui:composition template="/templates/mainTemplate.xhtml"> <ui:define name="PageContent"> <h3 style="stph3"><tr:outputText value="Ficha de Produto" /></h3> <h4 style="stph4"><tr:outputText value="[ Importação ]" styleClass="stph4"/></h4> <div align="center"> <tr:panelGroupLayout partialTriggers="correntePnifa" layout="vertical" styleClass="stptable" inlineStyle="width:300px"> <tr:panelHorizontalLayout styleClass="invisibleTable" inlineStyle="text-align: center;" partialTriggers="correntePnifa"> <tr:selectOneRadio id="correntePnifa" autoSubmit="true" binding="#{fichaBean.tipoPesquisa}" styleClass="stpinputText" layout="horizontal" value="#{fichaBean.tipoPesquisaSeleccionada}" valueChangeListener="#{fichaBean.updatePnifaVisibility}"> <f:selectItem itemValue="CORRENTE" itemLabel="Corrente" /> <f:selectItem itemValue="PNIFA" itemLabel="PNIFA" /> </tr:selectOneRadio> </tr:panelHorizontalLayout> <tr:panelHorizontalLayout inlineStyle="width: 200px;"> <hr style="height:1px;" /> </tr:panelHorizontalLayout> <tr:panelHorizontalLayout> <tr:outputText value="Código Pautal" styleClass="titleCell" /> <tr:outputText value="Ano" styleClass="titleCell" rendered="#{fichaBean.pnifaVisible}" /> <tr:inputText styleClass="fCodPautal" maximumLength="22" id="codPautal" binding="#{fichaBean.codPautal}" value="#{fichaBean.codigoPautal}" /> <tr:selectOneChoice id="selectAnoPnifa" binding="#{fichaBean.anoPnifa}" value="#{fichaBean.anoPnifaSeleccionado}" styleClass="stpselect" rendered="#{fichaBean.pnifaVisible}" valuePassThru="true"> <f:selectItems id="pnifaItems" value="#{fichaBean.anoPnifaItems}" /> </tr:selectOneChoice> </tr:panelHorizontalLayout> <tr:spacer height="15px"/> </tr:panelGroupLayout> <tr:commandButton text="Consultar" styleClass="fButton" action="consultarFichaImport" /> <tr:commandButton text="Ficar" styleClass="fButton" action="#{fichaBean.valorAlterado}"/> </div> </ui:define> </ui:composition> </f:view> </trh:body> </trh:html> ------ TEMPLATE CODE: mainTemplate.xhtml ------ <?xml version='1.0' encoding='windows-1252'?> <trh:html xmlns="http://www.w3.org/1999/xhtml" xmlns:trh="http://myfaces.apache.org/trinidad/html" xmlns:tr="http://myfaces.apache.org/trinidad" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" id="mainTemplatehtml1"> <trh:head id="mainTemplatehead1"> <link href="/stp/resources/css/stp.css" rel="stylesheet" media="screen"/> <link href="/stp/resources/css/calendar.css" rel="stylesheet" media="screen"/> </trh:head> <trh:body id="mainTemplatebody1" styleClass="stpbody"> <f:view> <f:loadBundle basename="pt.opensoft.messageResource.MessageResources" var="msg" /> <tr:form id="mainTemplateform1"> <tr:panelPage id="mainTemplatepanelPage1"> <f:facet name="messages"> <tr:messages id="mainMessagesID" text="Mensagens" rendered="true"> </tr:messages> </f:facet> <f:facet name="menuGlobal"> <tr:navigationPane id="mainTemplatemenuButtons1"> <tr:panelHorizontalLayout> <tr:commandLink text="#{msg.label_logout}" id="mainTemplatecommandLink1" action="#{logoutBean.actionSair}" immediate="true" /> </tr:panelHorizontalLayout> </tr:navigationPane> </f:facet> <f:facet name="branding"> <tr:image source="#{msg.logo_source}" id="mainTemplateobjectImage1" /> </f:facet> <f:facet name="appCopyright"> <tr:outputFormatted value="#{msg.label_copyright}" id="mainTemplateoutputFormatted1" /> </f:facet> <ui:insert name="menuOpcoes"> <ui:include src="../pages/menu.xhtml" /> </ui:insert> <ui:insert name="PageContent" /> </tr:panelPage> </tr:form> </f:view> </trh:body> </trh:html> ------ RENDERED HTML (first access )------- <?xml version='1.0' encoding='windows-1252'?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--Start: org.apache.myfaces.trinidad.Html["mainTemplatehtml1"]--><html dir="ltr" lang="en"><!--Start: org.apache.myfaces.trinidad.Head["mainTemplatehead1"]--> <head id="mainTemplatehead1"> <meta name="generator" content="Apache Trinidad"> <link rel="stylesheet" charset="UTF-8" type="text/css" href="/stp/adf/styles/cache/simple-desktop-1_0_0-incubating-en-gecko.css"><script>var _AdfWindowOpenError='A popup window blocker has been detected in your browser. Popup blockers interfere with the operation of this application. Please disable your popup blocker or allow popups from this site.';</script><script src="/stp/adf/jsLibs/Common11-m7.js"></script><script>_defaultTZ()</script> <link href="/stp/resources/css/stp.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/calendar.css" rel="stylesheet" media="screen"> </head> <!--Start: org.apache.myfaces.trinidad.Body["mainTemplatebody1"]--> <body id="mainTemplatebody1" onload="_checkLoad()" onunload="_checkUnload(event)" class="stpbody"> <iframe id="_pprIFrame" name="_pprIFrame" frameborder="0" longdesc="#" title="" src="about:blank" style="position:absolute;top:-100px;visibility:hidden" width="0" height="0"></iframe> <!--Start: org.apache.myfaces.trinidad.Body["mainTemplatebody1"]--><div id="_pprBlockingDiv" onclick="return _pprConsumeClick(event);" style="position:absolute;left:0;top:0;width:0;height:0;cursor:wait;" onkeydown="return false;" onkeyup="return false;" onmousedown="return false;" onmouseup="return false;" onkeypress="return false;"></div><script>var _cachedLibs;</script><a name="top"></a><!--Start: org.apache.myfaces.trinidad.Form["mainTemplateform1"]--> <form id="mainTemplateform1" name="mainTemplateform1" style="margin:0px" method="POST" onkeypress="return _submitOnEnter(event,'mainTemplateform1');" action="/stp/pages/ficha/fichaProdConsulta.jsf?_afPfm=-20ad0192"><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><span id="mainTemplatepanelPage1"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr> <td nowrap valign="top"><table cellpadding="0" cellspacing="2" border="0" width="1%"><tr> <td nowrap><!--Start: org.apache.myfaces.trinidad.Object["mainTemplateobjectImage1"]--><img id="mainTemplateobjectImage1" name="mainTemplateobjectImage1" src="/stp/resources/img/opensoft_logo.jpg"></td> </tr><tr> <td valign="top" nowrap></td> </tr></table></td> </tr><tr> <td width="100%"><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><table class="xc5" cellpadding="0" cellspacing="0" border="0" width="100%"><tr> <td height="1"></td> </tr></table></td> </tr></table><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><!--Start: org.apache.myfaces.trinidad.Messages["mainMessagesID"]--><span id="mainMessagesID"></span><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr valign="top"> <td width="100%"></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><?xml version='1.0' encoding='windows-1252'?> <div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id4"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id4"><tr> <td><!--Start: org.apache.myfaces.trinidad.Command["j_id5"]--><a id="j_id5" name="j_id5" onclick="submitForm('mainTemplateform1',1,{source:'j_id5'});return false;" class="xi" href="#">Ficha Produto Importação</a></td> </tr></table><div></div> <h3 style="stph3"><div></div><!--Start: org.apache.myfaces.trinidad.Output["j_id7"]--><span id="j_id7">Ficha de Produto</span><div></div></h3> <h4 style="stph4"><div></div><!--Start: org.apache.myfaces.trinidad.Output["j_id9"]--><span id="j_id9" class="stph4">[ Importação ]</span><div></div></h4> <div align="center"><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id11"]--><div id="j_id11" class="stptable" style="width:300px"><!--Start: org.apache.myfaces.trinidad.Panel["j_id12"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id12" class="invisibleTable" style="text-align: center;"><tr> <td><!--Start: org.apache.myfaces.trinidad.SelectOne["correntePnifa"]--><table id="correntePnifa__xc_" class="stpinputText x1l" cellpadding="0" cellspacing="0" border="0"><tr> <td class="x14" nowrap></td> <td valign="top" nowrap class="AFContentCell"><script>var _pprUpdateMode=false;function _adfspu(f,v,e,s,o){_pprUpdateMode=true;if(!o)o=new Object();o.event=(e)?e:'update';if(s)o.source=s;_submitPartialChange(f,v,o);}</script><!--Start: org.apache.myfaces.trinidad.SelectOne["correntePnifa"]--><span id="correntePnifa" class="x21"> <input type="radio" name="correntePnifa" id="correntePnifa:_0" value="0" onclick="_adfspu('mainTemplateform1',1,'correntePnifa','correntePnifa');return true;"><label for="correntePnifa:_0">Corrente</label> <input type="radio" name="correntePnifa" id="correntePnifa:_1" value="1" onclick="_adfspu('mainTemplateform1',1,'correntePnifa','correntePnifa');return true;"><label for="correntePnifa:_1">PNIFA</label></span></td> </tr></table></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id15"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id15" style="width: 200px;"><tr> <td> <hr style="height:1px;"> </td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id17"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id17"><tr> <td><!--Start: org.apache.myfaces.trinidad.Output["j_id18"]--><span id="j_id18" class="titleCell">Código Pautal</span></td> <td><!--Start: org.apache.myfaces.trinidad.Output["j_id19"]--><span id="j_id19" class="titleCell">Ano</span></td> <td><!--Start: org.apache.myfaces.trinidad.Input["codPautal"]--><table id="codPautal__xc_" class="fCodPautal x1e" cellpadding="0" cellspacing="0" border="0"><tr> <td class="xu" nowrap></td> <td valign="top" nowrap class="AFContentCell"><!--Start: org.apache.myfaces.trinidad.Input["codPautal"]--> <input id="codPautal" name="codPautal" class="x1p" size="30" maxlength="22" type="text"> </td> </tr></table></td> <td><!--Start: org.apache.myfaces.trinidad.SelectOne["selectAnoPnifa"]--><table id="selectAnoPnifa__xc_" class="stpselect x1j" cellpadding="0" cellspacing="0" border="0"><tr> <td class="x12" nowrap></td> <td valign="top" nowrap class="AFContentCell"><script>var _locale='en';var _tLocale='en';</script><script src="/stp/adf/jsLibs/resources/LocaleElements_en11-m7.js"></script><!--Start: org.apache.myfaces.trinidad.SelectOne["selectAnoPnifa"]--> <select id="selectAnoPnifa" name="selectAnoPnifa" class="x1z"> <option value=""></option> <option value="2006">2006</option> <option value="2005">2005</option> <option value="2004">2004</option> </select> </td> </tr></table></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Object["j_id20"]--><div id="j_id20" style="margin-top:15px"></div></div><div></div><!--Start: org.apache.myfaces.trinidad.Command["j_id21"]--> <button id="j_id21" name="j_id21" type="button" onclick="submitForm('mainTemplateform1',1,{source:'j_id21'});return false;" class="fButton x6l">Consultar</button><div></div><!--Start: org.apache.myfaces.trinidad.Command["j_id22"]--> <button id="j_id22" name="j_id22" type="button" onclick="submitForm('mainTemplateform1',1,{source:'j_id22'});return false;" class="fButton x6l">Ficar</button><div></div> </div><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div> <hr class="x98"><div class="x9a"></div><div class="x99"></div><div class="x9b"></div></div><div></div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div class="x9c"><div class="x9d"><span class="x5a"><!--Start: org.apache.myfaces.trinidad.Output["mainTemplateoutputFormatted1"]--><span id="mainTemplateoutputFormatted1">(@VERSION@) @VERSION-DATE@</span></span><span class="x5b"></span><span class="x5c"></span></div></div></span> <input type="hidden" name="org.apache.myfaces.trinidad.faces.FORM" value="mainTemplateform1"><span id="_mainTemplateform1_Postscript"><input type="hidden" name="org.apache.myfaces.trinidad.faces.STATE" value="!-20ad0192"> <input type="hidden" name="source"><script>var _resetmainTemplateform1Names=["source"];</script><script>var _mainTemplateform1_Validations=['new TrIntegerConverter(null,null,0,2147483647,-2147483648)'];function _mainTemplateform1Validator(f,s){var fl = _multiValidate(f,s,["selectAnoPnifa",0,,0,[]],0);if(fl.length>0){_validationAlert('Form validation failures:'+fl);return false;}else{return true;}}var _mainTemplateform1_Formats=['{0} - {1}'];var mainTemplateform1_SF={};</script></span><script>_submitFormCheck();</script></form> <!-- MYFACES JAVASCRIPT --> </body> <!--Created by Apache Trinidad (Apache Trinidad API - 1.0.0-incubating/Apache Trinidad Impl - 1.0.0-incubating), Accessibility:disabled, skin:simple.desktop (simple)--></html> ------- RENDERED HTML (postback in said conditions) ------- <?xml version='1.0' encoding='windows-1252'?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--Start: org.apache.myfaces.trinidad.Html["mainTemplatehtml1"]--><html dir="ltr" lang="en"><!--Start: org.apache.myfaces.trinidad.Head["mainTemplatehead1"]--> <head id="mainTemplatehead1"> <meta name="generator" content="Apache Trinidad"> <link rel="stylesheet" charset="UTF-8" type="text/css" href="/stp/adf/styles/cache/simple-desktop-1_0_0-incubating-en-gecko.css"><script>var _AdfWindowOpenError='A popup window blocker has been detected in your browser. Popup blockers interfere with the operation of this application. Please disable your popup blocker or allow popups from this site.';</script><script src="/stp/adf/jsLibs/Common11-m7.js"></script><script>_defaultTZ()</script> <link href="/stp/resources/css/stp.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/calendar.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/stp.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/calendar.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/stp.css" rel="stylesheet" media="screen"> <link href="/stp/resources/css/calendar.css" rel="stylesheet" media="screen"> </head> <!--Start: org.apache.myfaces.trinidad.Body["mainTemplatebody1"]--> <body id="mainTemplatebody1" onload="_checkLoad()" onunload="_checkUnload(event)" class="stpbody"> <iframe id="_pprIFrame" name="_pprIFrame" frameborder="0" longdesc="#" title="" src="about:blank" style="position:absolute;top:-100px;visibility:hidden" width="0" height="0"></iframe> <!--Start: org.apache.myfaces.trinidad.Body["mainTemplatebody1"]--><div id="_pprBlockingDiv" onclick="return _pprConsumeClick(event);" style="position:absolute;left:0;top:0;width:0;height:0;cursor:wait;" onkeydown="return false;" onkeyup="return false;" onmousedown="return false;" onmouseup="return false;" onkeypress="return false;"></div><script>var _cachedLibs;</script><a name="top"></a><!--Start: org.apache.myfaces.trinidad.Form["mainTemplateform1"]--> <form id="mainTemplateform1" name="mainTemplateform1" style="margin:0px" method="POST" onkeypress="return _submitOnEnter(event,'mainTemplateform1');" action="/stp/pages/ficha/fichaProdConsulta.jsf?_afPfm=-20ad0190"><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><span id="mainTemplatepanelPage1"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr> <td nowrap valign="top"><table cellpadding="0" cellspacing="2" border="0" width="1%"><tr> <td nowrap><!--Start: org.apache.myfaces.trinidad.Object["mainTemplateobjectImage1"]--><img id="mainTemplateobjectImage1" name="mainTemplateobjectImage1" src="/stp/resources/img/opensoft_logo.jpg"></td> </tr><tr> <td valign="top" nowrap></td> </tr></table></td> </tr><tr> <td width="100%"><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><table class="xc5" cellpadding="0" cellspacing="0" border="0" width="100%"><tr> <td height="1"></td> </tr></table></td> </tr></table><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><!--Start: org.apache.myfaces.trinidad.Messages["mainMessagesID"]--><span id="mainMessagesID"></span><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr valign="top"> <td width="100%"></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><?xml version='1.0' encoding='windows-1252'?> <div></div> <h3 style="stph3"><div></div></h3> <h4 style="stph4"><div></div></h4> <div align="center"><div></div> </div><div></div><?xml version='1.0' encoding='windows-1252'?> <div></div> <h3 style="stph3"><div></div></h3> <h4 style="stph4"><div></div></h4> <div align="center"><div></div> </div><div></div><?xml version='1.0' encoding='windows-1252'?> <div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id4"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id4"><tr> <td><!--Start: org.apache.myfaces.trinidad.Command["j_id5"]--><a id="j_id5" name="j_id5" onclick="submitForm('mainTemplateform1',1,{source:'j_id5'});return false;" class="xi" href="#">Ficha Produto Importação</a></td> </tr></table><div></div> <h3 style="stph3"><div></div><!--Start: org.apache.myfaces.trinidad.Output["j_id7"]--><span id="j_id7">Ficha de Produto</span><div></div></h3> <h4 style="stph4"><div></div><!--Start: org.apache.myfaces.trinidad.Output["j_id9"]--><span id="j_id9" class="stph4">[ Importação ]</span><div></div></h4> <div align="center"><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id11"]--><div id="j_id11" class="stptable" style="width:300px"><!--Start: org.apache.myfaces.trinidad.Panel["j_id12"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id12" class="invisibleTable" style="text-align: center;"><tr> <td><!--Start: org.apache.myfaces.trinidad.SelectOne["correntePnifa"]--><table id="correntePnifa__xc_" class="stpinputText x1l" cellpadding="0" cellspacing="0" border="0"><tr> <td class="x14" nowrap></td> <td valign="top" nowrap class="AFContentCell"><script>var _pprUpdateMode=false;function _adfspu(f,v,e,s,o){_pprUpdateMode=true;if(!o)o=new Object();o.event=(e)?e:'update';if(s)o.source=s;_submitPartialChange(f,v,o);}</script><!--Start: org.apache.myfaces.trinidad.SelectOne["correntePnifa"]--><span id="correntePnifa" class="x21"> <input type="radio" name="correntePnifa" id="correntePnifa:_0" value="0" onclick="_adfspu('mainTemplateform1',1,'correntePnifa','correntePnifa');return true;"><label for="correntePnifa:_0">Corrente</label> <input type="radio" name="correntePnifa" id="correntePnifa:_1" value="1" checked onclick="_adfspu('mainTemplateform1',1,'correntePnifa','correntePnifa');return true;"><label for="correntePnifa:_1">PNIFA</label></span></td> </tr></table></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id15"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id15" style="width: 200px;"><tr> <td> <hr style="height:1px;"> </td> <td> <hr style="height:1px;"> </td> <td> <hr style="height:1px;"> </td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Panel["j_id17"]--><table cellpadding="0" cellspacing="0" border="0" id="j_id17"><tr> <td><!--Start: org.apache.myfaces.trinidad.Output["j_id18"]--><span id="j_id18" class="titleCell">Código Pautal</span></td> <td><!--Start: org.apache.myfaces.trinidad.Output["j_id19"]--><span id="j_id19" class="titleCell">Ano</span></td> <td><!--Start: org.apache.myfaces.trinidad.Input["codPautal"]--><table id="codPautal__xc_" class="fCodPautal x1e" cellpadding="0" cellspacing="0" border="0"><tr> <td class="xu" nowrap></td> <td valign="top" nowrap class="AFContentCell"><!--Start: org.apache.myfaces.trinidad.Input["codPautal"]--> <input id="codPautal" name="codPautal" class="x1p" size="30" maxlength="22" type="text"> </td> </tr></table></td> <td><!--Start: org.apache.myfaces.trinidad.SelectOne["selectAnoPnifa"]--><table id="selectAnoPnifa__xc_" class="stpselect x1j" cellpadding="0" cellspacing="0" border="0"><tr> <td class="x12" nowrap></td> <td valign="top" nowrap class="AFContentCell"><script>var _locale='en';var _tLocale='en';</script><script src="/stp/adf/jsLibs/resources/LocaleElements_en11-m7.js"></script><!--Start: org.apache.myfaces.trinidad.SelectOne["selectAnoPnifa"]--> <select id="selectAnoPnifa" name="selectAnoPnifa" class="x1z"> <option value=""></option> <option value="2006">2006</option> <option value="2005">2005</option> <option value="2004">2004</option> </select> </td> </tr></table></td> </tr></table><div></div><!--Start: org.apache.myfaces.trinidad.Object["j_id20"]--><div id="j_id20" style="margin-top:15px"></div></div><div></div><!--Start: org.apache.myfaces.trinidad.Command["j_id21"]--> <button id="j_id21" name="j_id21" type="button" onclick="submitForm('mainTemplateform1',1,{source:'j_id21'});return false;" class="fButton x6l">Consultar</button><div></div><!--Start: org.apache.myfaces.trinidad.Command["j_id22"]--> <button id="j_id22" name="j_id22" type="button" onclick="submitForm('mainTemplateform1',1,{source:'j_id22'});return false;" class="fButton x6l">Ficar</button><div></div> </div><div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div> <hr class="x98"><div class="x9a"></div><div class="x99"></div><div class="x9b"></div></div><div></div></div><!--Start: org.apache.myfaces.trinidad.Panel["mainTemplatepanelPage1"]--><div class="x9c"><div class="x9d"><span class="x5a"><!--Start: org.apache.myfaces.trinidad.Output["mainTemplateoutputFormatted1"]--><span id="mainTemplateoutputFormatted1">(@VERSION@) @VERSION-DATE@</span></span><span class="x5b"></span><span class="x5c"></span></div></div></span> <input type="hidden" name="org.apache.myfaces.trinidad.faces.FORM" value="mainTemplateform1"><span id="_mainTemplateform1_Postscript"><input type="hidden" name="org.apache.myfaces.trinidad.faces.STATE" value="!-20ad0190"> <input type="hidden" name="source"><script>var _resetmainTemplateform1Names=["source"];</script><script>var _mainTemplateform1_Validations=['new TrIntegerConverter(null,null,0,2147483647,-2147483648)'];function _mainTemplateform1Validator(f,s){var fl = _multiValidate(f,s,["selectAnoPnifa",0,,0,[]],0);if(fl.length>0){_validationAlert('Form validation failures:'+fl);return false;}else{return true;}}var _mainTemplateform1_Formats=['{0} - {1}'];var mainTemplateform1_SF={};</script></span><script>_submitFormCheck();</script></form> <!-- MYFACES JAVASCRIPT --> </body> <!--Created by Apache Trinidad (Apache Trinidad API - 1.0.0-incubating/Apache Trinidad Impl - 1.0.0-incubating), Accessibility:disabled, skin:simple.desktop (simple)--></html> > Francisco, > > Sure... Can you send the jsf code and the html rendered on the client > page? > > -----Original Message----- > From: Francisco Passos [mailto:[EMAIL PROTECTED] > Sent: Monday, April 09, 2007 1:00 PM > To: [email protected] > Subject: RE: Keeping selectOneChoice selection > > > Thank you for your hints. > > I will bear this in mind when I come to this situation - which will be > soon enough. > > However, back to this this particular scenario where no table is involved, > do you know of any way I manage to solve this problem? > > >> Francisco, >> >> I have found that there is a fundamental problem with how >> UINamingContainers are processed when row indexes are inserted into the >> ids of EditableValueHolders within the container rows. >> >> Understanding The Problem: >> As you may already know, tables have only columns referenced in the page >> so it can handle an almost infinite number of rows. Well, because you >> have >> only specified an id for a component within the table column the >> component >> inserts a row index reference in the holders id (via getClientRowKey() >> in >> a table) for each row. This ensures that each iteration of that row has >> a >> unique id. The problem with this is that in some cases this breaks >> automatic setting of bean values (if they are value bound to an >> EditableValueHolder within a row). Another issue is that >> "selectOneChoice" >> components in particular do not have a mechanism in place to ensure that >> a >> submitted value that gets set on the component is one of the values >> within >> the internal "SelectItemList" so virtually any value can get set on it. >> If >> the submitted value is not in the list it adds a blank entry in the drop >> down menu- what? I have also noticed that selectOneChoice component does >> not handle value conversion like regular input text components do. >> Semi-primitive values such as Integers, Booleans, etc. are not converted >> automatically like they are for regular input text components. I had >> some >> of the same issues with the "detailStamp" so I created an extended table >> component that allows only one toggled "detailStamp" at a time and >> overrides the "getClientRowKey()" excluding row indexes for components >> within the "detailStamp". This solution works very well, but still does >> not address EditableValueHolders within the rows themselves. It seems to >> me that we need to reevaluate the usage of inserting row indexes into >> ids! >> >> Possible Solutions: >> The first thing I would check is that you have the valuePassThru="true" >> to >> ensure that its not trying to use the index as the passed value (not >> sure >> why anyone would want to be restricted to just an index). If want to >> ensure that your value is never set to a value that does not exist in >> the >> options you can use a value change listener: >> >> >> /** >> * Verifies that an editable value holder event components value is a >> valid >> * option. If it is not it sets it back to the old value. >> * >> * @see #getEditableValueHolderValue(EditableValueHolder) >> * @param event >> */ >> public final void verifyValueOption(ValueChangeEvent event) { >> try { >> if (event.getComponent() instanceof >> EditableValueHolder) { >> EditableValueHolder valueHolder = >> (EditableValueHolder) event >> .getComponent(); >> if (!isValidSelectOption(event.getComponent(), >> event.getNewValue())) >> { >> // invalid option- regress to old value >> >> valueHolder.setValue(event.getOldValue()); >> >> valueHolder.setSubmittedValue(event.getOldValue()); >> } >> } >> } catch (Throwable e) { >> log.warn("Unable to verify select value. " + >> e.getMessage() >> + " cause: " + e.getCause()); >> } >> } >> >> /** >> * Determines if the specified value is a valid selection option in the >> * specified select component. >> * >> * @param component >> * @param value >> * @return is the specified value a valid select option >> */ >> public static final boolean isValidSelectOption(UIComponent component, >> Object value) { >> try { >> List<SelectItem> items = >> SelectItemSupport.getSelectItems( >> component, >> SelectItemSupport.getConverter(component)); >> for (SelectItem item : items) { >> if (item.getValue() != null && >> item.getValue().equals(value)) { >> return true; >> } >> } >> } catch (Exception e) { >> _LOG.warning("Unable to determine if the specified >> value: " + value >> + " is valid for the select component: >> " + component); >> } >> return false; >> } >> >> >> >> Probably not the most elegant solution, but nonetheless an effective one >> is to manage the submitted row index problems yourself. If nothing else >> this will provide you with a debugging tool to determine if the row >> index >> references are preventing your values from getting set: >> /** >> * <p> >> * Gets a parameter value from the request scope by an editale value >> holder >> * components id. This method will set/return the holders submitted >> value >> * from the request. >> * </p> >> * <p> >> * The holders client id is checked against a possible matching id >> request >> * parameter. The client id of the holder and the request parameter >> matching >> * the hodler id may have their own row indexing (such is the case with >> a >> * select menu). >> * <ol> >> * <li>The client id against the request parameter</li> >> * <li>The client id w/o row index against the request parameter</li> >> * <li>The client id against the request parameter w/o row index</li> >> * </ol> >> * </p> >> * >> * @param context >> * @param holder >> * @return the parameter value >> */ >> @SuppressWarnings("unchecked") >> public static final Object getRequestParameterByHolderId( >> FacesContext context, EditableValueHolder holder) { >> if (log.isDebugEnabled()) >> log.debug("getRequestParameterForNamingContainer(" + >> context + ',' >> + holder + ")"); >> if (holder != null && holder instanceof UIComponent) { >> String clientId = ((UIComponent) >> holder).getClientId(context); >> String clientIdWithOutRowIds = >> removeRowIdReferences(clientId); >> String id = ((UIComponent) holder).getId(); >> Map<String, Object> map = context.getExternalContext() >> .getRequestParameterMap(); >> if (map != null && map.entrySet() != null) { >> for (Map.Entry<String, Object> entry : >> map.entrySet()) { >> if (entry.getKey().indexOf(id) >= 0) { >> if >> (entry.getKey().equalsIgnoreCase(clientId) >> || >> entry.getKey().equalsIgnoreCase( >> >> clientIdWithOutRowIds) >> || >> removeRowIdReferences( >> >> entry.getKey()).equalsIgnoreCase( >> >> clientId)) { >> try { >> >> setConvertedAndValidatedValue(context, >> >> holder, entry.getValue()); >> } catch (Exception e) { >> >> log.error("Unable to capture the converted " >> >> + "value for component(" + holder >> >> + ") value: " + entry.getValue(), e); >> } >> return >> holder.getSubmittedValue(); >> } >> } >> } >> } >> } >> return null; >> } >> >> /** >> * Removes any row id references that may exist within the specified >> client >> * id >> * >> * @param clientId >> * @return the client id >> */ >> public static final String removeRowIdReferences(String clientId) { >> if (log.isDebugEnabled()) >> log.debug("removeRowIdReferences(" + clientId + ')'); >> if (clientId != null) { >> String[] ids = clientId.split(String >> >> .valueOf(NamingContainer.SEPARATOR_CHAR)); >> for (String id : ids) { >> try { >> Integer.parseInt(id); >> } catch (Exception e) { >> continue; >> } >> clientId = >> clientId.replace(NamingContainer.SEPARATOR_CHAR + id >> + >> NamingContainer.SEPARATOR_CHAR, String >> >> .valueOf(NamingContainer.SEPARATOR_CHAR)); >> } >> } >> return clientId; >> } >> >> /** >> * Invokes the internal converter/validators(s) for an editable value >> holder >> * and returns the converted value >> * >> * @param context >> * @param holder >> * @param value >> * @return the converted value >> * @throws ValidatorException >> * @throws EvaluationException >> * @throws MethodNotFoundException >> */ >> public static final Object setConvertedAndValidatedValue(FacesContext >> context, >> EditableValueHolder holder, Object value) >> throws ValidatorException, EvaluationException, >> MethodNotFoundException { >> if (holder != null) { >> if (holder.getConverter() != null) { >> value = >> holder.getConverter().getAsObject(context, >> (UIComponent) holder, >> value != null ? >> value.toString() : null); >> } >> if (holder instanceof UIComponent) { >> if (holder.getValidators() != null) { >> for (Validator v : >> holder.getValidators()) { >> v.validate(context, >> (UIComponent) holder, value); >> } >> } >> } >> if (holder.getValidator() != null) { >> holder.getValidator().invoke(context, new >> Object[] { value }); >> } >> holder.setSubmittedValue(value); >> return value; >> } >> return null; >> } >> >> -----Original Message----- >> From: Francisco Passos [mailto:[EMAIL PROTECTED] >> Sent: Monday, April 09, 2007 11:17 AM >> To: William Hoover >> Subject: RE: Keeping selectOneChoice selection >> >> >> No, it is in a facet for a panelPage. >> >> In it, I have a panelGroupLayout, then a panelHorizontalLayout and >> finally >> in it the panelPage. >> >> If you feel it's best, I can attach the code or paste it in the mail >> body. >> >> Either way, if the selectOneChoice were in a table (something I will >> surely need), what would the solution be? >> >> Thank you, >> >> Francisco >> >> >> >>> Francisco, >>> >>> Is your selectOneChoice in a table? >>> >>> -----Original Message----- >>> From: Francisco Passos [mailto:[EMAIL PROTECTED] >>> Sent: Monday, April 09, 2007 10:55 AM >>> To: [email protected] >>> Subject: Keeping selectOneChoice selection >>> >>> >>> Hello there. >>> >>> I'm new to JSF and Trinidad, so please bear with my simplistic doubts. >>> >>> I'm struggling to keep a selectOneChoice selection upon a postback >>> using >>> a >>> request-scoped bean. >>> >>> At first I couldn't even maintain the values in the list, but I found >>> that >>> placing a h:inputHidden on the page and declaring its value to be >>> #{myBean.valueList}, they could be kept. Furthermore I've tested the >>> seme >>> using pageFlow and it worked. >>> >>> However, I cannot keep the selected value in the dropdown list, it just >>> resets. >>> >>> What is the correct way to do this simple task without using session >>> beans? >>> >>> Thank you for your time and attention, >>> >>> Francisco Passos >>> >>> >>> >> >> >> Francisco Passos >> Opensoft - Soluções Informáticas, Lda >> Telemóvel: +351 91 238 52 76 >> Escritório: +351 21 380 44 10 >> Email: [EMAIL PROTECTED] >> >> >> > > > Francisco Passos > Opensoft - Soluções Informáticas, Lda > Telemóvel: +351 91 238 52 76 > Escritório: +351 21 380 44 10 > Email: [EMAIL PROTECTED] > > > Francisco Passos Opensoft - Soluções Informáticas, Lda Telemóvel: +351 91 238 52 76 Escritório: +351 21 380 44 10 Email: [EMAIL PROTECTED]
