[Fwd: [seam-dev] In list.xhtml.ftl, what is the point of the foreach for the create button if Pages.applyConvertedValidatedValuesToMode cannot deal with nulls in parameters?]

Francisco Jose Peredo franciscoperedo at tabasco.gob.mx
Wed Dec 10 14:42:14 EST 2008


Was I wrong to post this in this mail list?  I supposed this was the
right place to discuss it, since it is related to "internal" Seam code,
and not to "usage" of seam. I apologize if that assumption was
incorrect... Should I re-post this in
http://www.seamframework.org/Community/SeamUsers ?

Francisco Jose Peredo escribió:
> So? Am I right whe I say that the foreach for the create button in
> list.xhtml.ftl button is unnecesary? Maybe it was necessary in the
> past? Maybe the reason it was there was to try (unsuccessfully in my
> opinion) to prevent parameter propagation?
> Maybe this loop should be replaced by includePageParams="false" ?
>
> Regards,
>
> Francisco
>
> -------- Mensaje original --------
> Asunto: 	[seam-dev] In list.xhtml.ftl, what is the point of the
> foreach for the create button if
> Pages.applyConvertedValidatedValuesToMode cannot deal with nulls in
> parameters?
> Fecha: 	Mon, 08 Dec 2008 10:52:56 -0600
> De: 	Francisco Jose Peredo <franciscoperedo at tabasco.gob.mx>
> A: 	seam-dev at lists.jboss.org
>
>
>
> Hi!
> The code for the create button in list.xhtml.ftl looks like this:
>
> <s:div styleClass="actionButtons" rendered="${'#'}{empty from}">
>         <s:button view="/${editPageName}.xhtml"
>                     id="create"
>            propagation="none"
>                  value="Create ${componentName}">
> <#assign idName = componentName + pojo.identifierProperty.name?cap_first>
> <#if c2j.isComponent(pojo.identifierProperty)>
> <#foreach componentProperty in
> pojo.identifierProperty.value.propertyIterator>
> <#assign cidName = componentName + componentProperty.name?cap_first>
>             <f:param name="${cidName}"/>
> </#foreach>
> <#else>
>             <f:param name="${idName}"/>
> </#if>
>         </s:button>
>     </s:div>
>
> That generates a <f:param name="${idName}"/> for the primarykey(s).
> Why is that done? My best guess is that it is to clear the value
> of the primary key for the new object that is going to be created.
>
> But the <f:param name="${idName}"/> actually does nothing, because in
> seam it is impossible to set a parameter to null. This f:params are
> AFAIK expected to set the method generated in EntityHome.java.ftl:
>
>  public void set${idName}(${idType} id)
>     {
>         setId(id);
>     }
>
> But that set is never going to be called for <f:param
> name="${idName}"/> because the id value is null! And there is code to
> prevent set${idName}(${idType} id) from being called if the value for
> the id is going to be null in Pages.applyConvertedValidatedValuesToMode:
>
> private void applyConvertedValidatedValuesToModel(FacesContext
> facesContext)
>    {
>       String viewId = getViewId(facesContext);
>       for ( Page page: getPageStack(viewId) )
>       {
>          for ( Param pageParameter: page.getParameters() )
>          {        
>             ValueExpression valueExpression =
> pageParameter.getValueExpression();
>             if (valueExpression!=null)
>             {
>               * Object object = Contexts.getEventContext().get(
> pageParameter.getName() );
>                if (object!=null) //<--- HERE IS THE PROBLEM
>                {
>                   valueExpression.setValue(object);
>                }*
>             }
>          }
>       }
>    }
>
> Of course, it gives the impression it works, but that is just because
> our EntityHome is recently created and the value for the Id is
> initially null. But if we place our EntityHome inside a LRC, and try
> to use after a previous creation set the value of the Id, we will see
> that the Id is not reset to null by the <f:param name="${idName}"/>
>
> A workaround I use when the id is Integer is this the -1 value:
>
> <f:param name="${idName}" value="-1"/>
>
>  public void set${idName}(${idType} id)
>     {
>         if(id<0){
>              setId(null);
>         }else{
>             setId(id);
>         }
>     }
>
> But that, as it was commented in another null related discussion, a
> really ugly way to deal with stuff we want to be "undefined". So what
> can be done to fix this in Seam/seam-gen? (And of course offer a
> solution that can be used as a "best practice" for dealing with this
> even in applications that do not use seam-gen).
>
> I propose removing the if (object!=null) from
> applyConvertedValidatedValuesToModel (and maybe other methods in Pages
> that avoid dealing with nulls in the same limited way? like perhaps
> convertAndValidateStringValuesInPageContext? and
> getStringValuesFromModel? and storeRequestStringValuesInPageContext?
> and possibly others...).
>
> Now, if ignoring null values for page parameters in this way is not a
> bug, but a feature, then I propose removing the foreach for the create
> button list.xhtml.ftl, because it just creates the false impression
> that  <f:param name="${idName}"/> actually does something.
>
> I already created a related JIRA a while ago
> (https://jira.jboss.org/jira/browse/JBSEAM-3693) but guess I was not
> able to correctly explain this problem, I hope to have better luck
> this time.
>
> Regards,
> Francisco Peredo
>
>
> -- 
> Dirección Informática de Servicios Financieros
> Dirección General de Modernización e Innovación Gubernamental
> Secretaría de Administración y Finanzas
> Paseo de la Sierra 435 col. Reforma
> C.P. 86086, Villahermosa, Tabasco.
> Tel. 52 + 993 + 310 40 00 Ext. 7127
> http://saf.tabasco.gob.mx/
>
> IMPORTANTE: Esta transmisión electrónica, incluyendo sus anexos, archivos insertados o "attachments", puede constituir información confidencial o reservada, en los términos de la Ley de Acceso a la Información Pública del Estado de Tabasco, y estar protegida por el derecho fundamental a la privacidad. Se prohibe el uso de esta información por cualquier persona distinta al receptor intencional o previsto. Si usted ha recibibido esta transmisión electrónica por error, por favor responda inmediatamente al emisor y borre esta información de su sistema. El uso, diseminación, distribución o reproducción de esta transmisión electrónica por receptores no intencionados o no previstos por el emisor, no está autorizada y puede considerarse ilícita en los términos de la legislación penal y civil vigente.
>
> -- 
> Dirección Informática de Servicios Financieros
> Dirección General de Modernización e Innovación Gubernamental
> Secretaría de Administración y Finanzas
> Paseo de la Sierra 435 col. Reforma
> C.P. 86086, Villahermosa, Tabasco.
> Tel. 52 + 993 + 310 40 00 Ext. 7127
> http://saf.tabasco.gob.mx/
>
> IMPORTANTE: Esta transmisión electrónica, incluyendo sus anexos, archivos insertados o "attachments", puede constituir información confidencial o reservada, en los términos de la Ley de Acceso a la Información Pública del Estado de Tabasco, y estar protegida por el derecho fundamental a la privacidad. Se prohibe el uso de esta información por cualquier persona distinta al receptor intencional o previsto. Si usted ha recibibido esta transmisión electrónica por error, por favor responda inmediatamente al emisor y borre esta información de su sistema. El uso, diseminación, distribución o reproducción de esta transmisión electrónica por receptores no intencionados o no previstos por el emisor, no está autorizada y puede considerarse ilícita en los términos de la legislación penal y civil vigente.
> ------------------------------------------------------------------------
>
> _______________________________________________
> seam-dev mailing list
> seam-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/seam-dev


-- 
Dirección Informática de Servicios Financieros
Dirección General de Modernización e Innovación Gubernamental
Secretaría de Administración y Finanzas
Paseo de la Sierra 435 col. Reforma
C.P. 86086, Villahermosa, Tabasco.
Tel. 52 + 993 + 310 40 00 Ext. 7127
http://saf.tabasco.gob.mx/

IMPORTANTE: Esta transmisión electrónica, incluyendo sus anexos, archivos insertados o "attachments", puede constituir información confidencial o reservada, en los términos de la Ley de Acceso a la Información Pública del Estado de Tabasco, y estar protegida por el derecho fundamental a la privacidad. Se prohibe el uso de esta información por cualquier persona distinta al receptor intencional o previsto. Si usted ha recibibido esta transmisión electrónica por error, por favor responda inmediatamente al emisor y borre esta información de su sistema. El uso, diseminación, distribución o reproducción de esta transmisión electrónica por receptores no intencionados o no previstos por el emisor, no está autorizada y puede considerarse ilícita en los términos de la legislación penal y civil vigente.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/seam-dev/attachments/20081210/37ed1d34/attachment.html 


More information about the seam-dev mailing list