Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2008, 03:12
Avatar de Llave
Llave
 
Fecha de Ingreso: abril-2005
Ubicación: Galicia
Mensajes: 52
Antigüedad: 19 años
Puntos: 1
De acuerdo Problema al usar PartialTriggers y AutoSubmit en un form entre dos campos. (SOLVED)

Hola! disculpad si esta no es la sección adecuada para plantear mi duda.

Intentaré ser conciso. Plantearé lo que quiero hacer y me gustaría saber si es posible, de no serlo... si alguien me pudiese orientar sobre una alternativa sería genial.

Veamos.
Estoy utilizando clases JAVA y Trinidad para JSF.
En una plantilla JSP debo mostrar diversos campos de unas construcciones. Estas se cargan de una lista que me da el Bean, esta lista la muestro mediante una tabla, contenida en un formulario en el JSF.
Cada una de las construcciones muestra datos editables, de forma que, si modifico uno de esos campos, otros campos se recalcularán.

Os mostraré el ejemplo con el que estoy trabajando, una vez consiga lo que quiero aquí, ya lo usaré para el proyecto con el que estoy trabajando.

Supongamos que tengo 3 construcciones A,B,C y para cada una de ellas tengo tres campos editables CANTIDAD, dias/unidad, unidades/dia.

Si modifico el contenido de dias/unidad, automáticamente, cuando me mueva de campo se actualizará unidades/día. Esto lo sé hacer. El problema, es que quiero que, si modifico unidades/día, se me actualice días/unidad. Y ahí es donde no consigo que funcione.

Para hacer esto, tengo una clase con getters y setters para los dos métodos que me dan ese cálculo.

No sé si me estaré liando demasiado, disculpad si es así, me gustaría que no hubiera dudas en cuando a lo que quiero lograr.
Un dibujo de ejemplo de los campos podría ser algo como esto:


Y el código que estoy usando en JSP es el siguiente

Código PHP:
<tr:table id="constructionTable" value="#{Bean.constructionList}" var="construction">
<!-- 
CANTIDAD -->
    <
tr:column>
        <
f:facet name="header">
            <
tr:outputText value="Cantidad"/>
        </
f:facet>
        <
tr:inputText id="amount" 
        
columns="8"
        
value="#{construction.constructionClass.numUnits}" required="true">
        <
f:convertNumber type="number" pattern="0.00" />
        </
tr:inputText>
    </
tr:column>

<!-- 
DIAS/UNIDAD -->
    <
tr:column>
        <
f:facet name="header">
            <
tr:outputText value="Dias/unidad"/>
        </
f:facet>
        <
tr:inputText id="daysperunit" 
        
columns="5"
        
partialTriggers="unitsperday"
        
autoSubmit="true"
        
value="#{construction.constructionClass.operDaysPerUnit}" required="true">
        </
tr:inputText>
    </
tr:column>

<!-- 
UNIDADES/DIA -->
    <
tr:column>
        <
f:facet name="header">
            <
tr:outputText value="Unidades/dia"/>
        </
f:facet>
        <
tr:inputText id="unitsperday" 
            
columns="5"
            
autoSubmit="true"
            
partialTriggers="daysperunit"
            
value="#{construction.constructionClass.operUnitsPerDay}" required="true">
        </
tr:inputText>
    </
tr:column>
</
tr:table
El caso es que para lograr esta "actualización de campos", los inputText que deben "modificar" otros campos deben reenviar el formulario. Es por ello que les puse:
autoSubmit="true"
Así, si modifico el valor de ese campo me aseguro el envío del formulario. Y luego, en el inputText que debo recargar por que ha sufrido cambios le añado el
partialTriggers=" id del que causó el origen del evento".

Si tengo el autosubmit en DIAS/UNIDAD y el partialTriggers en UNIDADES/DIA va perfecto. Siempre que modifico DIAS/UNIDAD, UNIDADES/DIA se recalcula tal y como deseo.
Pero... en cuando añado el autoSubmit a UNIDADES/DIA y el PartialTriggers a DIAS/UNIDAD me ocurre lo siguiente:

- En ocasiones me actualiza los valores funcionando bien y en otras ocasiones me "restaura los valores" manteniendo el mismo valor que tenía antes del cambio.
He mirado por qué era esto y es debido a que... cuando se realiza el reenvío del formulario, si el SETTER que se realiza primero es el del campo que he modificado, todo funciona bien, se recalculan los campos y obtengo el resultado esperado. Pero si el SETTER que se realiza primero es el del otro campo, el que se recalcula es el campo que quiero modificar y se pierde el dato que quería modificar.

¿Alguien sabe como podría solucionarlo? Gracias.

PD: Este problema ya lo tuve en otra ocasion, sólo que, entonces no tenía una lista y pude utilizar un par de métodos en el Bean para "salir del paso". En este caso, al tener la lista, el Bean me sirve de poco y... no querría modificar los métodos de la clase que tengo en el modelo, para no hacerlos dependientes de la interfaz.

Un saludo.

Última edición por Llave; 15/05/2008 a las 04:02 Razón: Añadir "solved"