PrimeFaces - Campo disabled envia o valor null para o Bean

Fala galera, bom dia!!!

Minha dúvida é a seguinte, estou utilizando o PrimeFaces com o JSF 2 para desenvolver minha interface, eis que me deparei com a seguinte questão.

Tenho um campo do tipo:

<p:inputText id="homeIdFake" disabled="true" value="#{homeController.bean.homeId}">

Porém quando o campo está preenchido com algum valor ele não é setado no Bean. Se eu remover o “disabled” ele funciona corretamente.

A solução que encontrei para contornar o problema foi criar um campo “hidden” que armazene o valor desse input, porém não fiquei satisfeito com essa gambiarra, ops, solução.

Esse comportamento é normal? O que estou fazendo de errado?

Acabei de encontrar um tópico na página do Prime que menciona o “erro”.

[i]Re: Problems with the “disabled” attribute and form submission
Things like this can happen, if state is not preserved that is why I’ve asked about the scope of your request. So in your request you seem to enable components but evaluating disabled EL next time will yield to true as state is not kept and [color=red]JSF does not process disabled components[/color]. With JSF 2.0 you can use view scope and for JSF 1.2, workarounds like tomahawk saveState, springs custom scopes, seam viewscope and more.

Anyway glad you worked it out somehow.[/i]
Obs: ReadOnly também não é enviado para o Bean.

Bem, parece que o JSF não processa campos desabilitados. Fica a dica então, podem usar um campo “hidden” com a mesma EL para enviar para Bean o valor do campo desabilitado.

Abraços.

Estou com um problema semelhante ao do criador deste tópico, a diferença é que é um atributo do meu bean que diz se o campo está enabled ou disabled. No momento do submit, tenho CERTEZA que os campos estão ativados, porém estes não são validados e quando chegam no bean, diversas nullPointExceptions são lançadas. Segue abaixo o meu código da minha página:

		<h:panelGrid columns="2">

			<p:outputLabel for="cpf" value="CPF" styleClass="customLabel" />
			<p:inputMask id="cpf" mask="999.999.999-99" placeHolder=" "
				value="#{UsuarioBean.usuario.cpf}" required="true"
				disabled="#{UsuarioBean.edicao}"
				requiredMessage="#{locale['validacoes.campo']} CPF #{locale['validacoes.requerido']}"
				tabindex="1">
				<f:validator validatorId="validator.CpfValidator" />
				<f:validator validatorId="validator.UniqueCPFValidator" />
			</p:inputMask>

			<p:outputLabel for="nomeTela" value="Nome de Tela"
				styleClass="customLabel" />
			<p:inputText id="nomeTela" value="#{UsuarioBean.usuario.nomeTela}"
				size="30" maxlength="20" required="true"
				disabled="#{UsuarioBean.edicao}"
				requiredMessage="#{locale['validacoes.campo']} Nome de Tela #{locale['validacoes.requerido']}"
				tabindex="2">
			</p:inputText>

			<p:outputLabel for="senha" value="Senha" styleClass="customLabel" />
			<p:password id="senha" value="#{UsuarioBean.usuario.senha}" size="30"
				required="true"
				disabled="#{UsuarioBean.edicao}"
				requiredMessage="#{locale['validacoes.campo']} Senha #{locale['validacoes.requerido']}"
				tabindex="3">
			</p:password>

			<p:outputLabel for="nome" value="Nome" styleClass="customLabel" />
			<p:inputText id="nome" value="#{UsuarioBean.usuario.nome}" size="70"
				maxlength="60" required="true"
				disabled="#{UsuarioBean.edicao}"
				requiredMessage="#{locale['validacoes.campo']} Nome #{locale['validacoes.requerido']}"
				tabindex="3">
			</p:inputText>

			<p:outputLabel for="email" value="E-mail" styleClass="customLabel" />
			<p:inputText id="email" required="true"
				disabled="#{UsuarioBean.edicao}"
				requiredMessage="#{locale['validacoes.campo']} E-mail #{locale['validacoes.requerido']}"
				tabindex="5" size="70" value="#{UsuarioBean.usuario.email}">
				<f:validator validatorId="validator.EmailValidator" />
				<f:validator validatorId="validator.UniqueEmailValidator" />
			</p:inputText>

			<p:outputLabel for="funcao" value="Função" styleClass="customLabel" />
			<p:inputText id="funcao" value="#{UsuarioBean.usuario.funcao}"
				disabled="#{UsuarioBean.edicao}"
				size="45" maxlength="35" required="true"
				requiredMessage="#{locale['validacoes.campo']} Função #{locale['validacoes.requerido']}"
				tabindex="6">
			</p:inputText>
		</h:panelGrid>

O atributo UsuarioBean.edicao é um boolean e ele que define se o componente está ativo (disable=“false”) ou inativo (disable=“true”).

Existe alguma forma deste problema ser contornado?

to com o mesmo problema alguem sabe uma maneira de contorna esse erro?

nem q seja por esse hidden

Alguem???

Peço desculpas por desenterrar o tópico mas não achei em outro lugar a solução.
Como fizeram?

Caso não tenham solucionado, vcs podem alterar o readonly para exibir apenas durante o ciclo de exibicao da view.

uma solução é a seguinte:

  p:inputText   size="4"  maxlength="4" value="#{bean}"  id="inputId" readonly="#{facesContext.renderResponse}"