2012-04-30 8 views
6

Estoy usando JSF 1.1. Tengo una página JSF con un bean con ámbito de solicitud y un campo de entrada de solo lectura.Los datos en <h: inputText readonly = "true"> desaparecen cuando se hace clic en el botón de comando

<h:inputText id="dt" value="#{bean.sdate}" readonly="#{bean.disable}" /> 
<a onclick="cal('dt');"><img src="fr.gif" border="0"></a> 

Cuando fijo el valor de entrada utilizando JavaScript y haga clic en el botón de comando, a continuación, los datos de campo de entrada desaparece.

Cómo se produce esto y cómo puedo solucionarlo.

+5

Sé que algunas personas que responden una pregunta sobre SO pueden considerarse magos, pero no pueden hacer nada ** sin la muestra del código **. – maialithar

+0

Realmente no sé qué sucede en el método 'cal (alguna variable String)' ... – maialithar

+0

si su readonly está configurado en true, el valor de # {bean.sdate} no se enviará al servidor ... y así obtendrá perdido ... – Daniel

Respuesta

18

Eso es porque la propiedad está configurada en readonly. Si esto evalúa true, entonces JSF no procesará el valor enviado y, por lo tanto, el modelo no se actualizará. Si desea configurarlo en readonly al renderizar la vista y tiene JSF para procesar el valor enviado, entonces tendrá que hacerlo para evaluar true en la fase de respuesta de renderizado solamente. Puede usar FacesContext#getRenderResponse() para esto. Tendría que hacer esto en su método isDisable().

public boolean isDisable() { // TODO: rename to isReadonly(). 
    return FacesContext.getCurrentInstance().getRenderResponse(); 
} 

Nota: en JSF2 se podía acceder por FacesContext#getCurrentInstance()#{facesContext} en la vista así, esto ahorra algo repetitivo en el modelo:

<h:inputText ... readonly="#{facesContext.renderResponse}" /> 

También tenga en cuenta que cuando se está utilizando JSF2 <f:viewParam>, a continuación, este enfoque ya no funcionará en las solicitudes GET. Vea también Make a p:calendar readonly para la explicación y la solución.

+0

al mismo tiempo me preguntaba si supongo que quiero actualizar el modelo en cualquier otra fase como "validación del proceso", entonces ¿cómo puedo hacer lo mismo como lo hizo aquí? . – Addicted

Cuestiones relacionadas