JSF - rendered, required e disabled dinâmicos

3 respostas
R

Olá, pessoal!!

É o seguinte: eu cheguei a colocar minha necessidade em outro post, mas acredito que não tenha sido claro (nenhuma resposta). Vou tentar explicar com exemplos oq eu preciso:

Tenho uma pagina chamada objeto.xhtml, que contém um modal para cadastro, e um dos campos de entrada está assim:

<rich:message for="codigo" >
	<f:facet name="errorMarker">
		<h:graphicImage value="images/ajax/error.gif" />
	</f:facet>
</rich:message>
<h:outputText value="Código:" />
<h:inputText id="codigo" size="40" maxlength="50" value="#{objetoMBean.objeto.codigo}" requiredMessage="Campo obrigatório"
	disabled="false" required="true"/>

O id, disabled e required estão fixos. Até aí tudo bem.
Agora, vem a minha necessidade:
Tenho um objeto com trocentos campos, e eu preciso permitir ao administrador que configure quais campos são exibidos em tela, obrigatórios e/ou habilitados.
Fiz o seguinte:

<h:panelGroup rendered="#{objetoMBean.objeto.codigoRenderizado}">
	<rich:message for="codigo" >
		<f:facet name="errorMarker">
			<h:graphicImage value="images/ajax/error.gif" />
		</f:facet>
	</rich:message>
	<h:outputText value="Código:" />
	<h:inputText id="codigo" size="40" maxlength="50" value="#{objetoMBean.objeto.codigo}" requiredMessage="Campo obrigatório"
		disabled="#{objetoMBean.objeto.codigoDesabilitado}" required="#{objetoMBean.objeto.codigoRequerido}"/>
</h:panelGroup>

O problema é que cada campo do objeto ganhou 3 novos métodos (além de get/set). Ou seja, se eu tinha trocentos campos, tenho trocentos*3 mais métodos.
Eu queria fazer algo do tipo:

<h:panelGroup rendered="#{objetoMBean.objeto.renderizado('codigo')}">
	<rich:message for="#{objetoMBean.objeto.campo('codigo')}" >
		<f:facet name="errorMarker">
			<h:graphicImage value="images/ajax/error.gif" />
		</f:facet>
	</rich:message>
	<h:outputText value="Código:" />
	<h:inputText id="#{objetoMBean.objeto.campo('codigo')}" size="40" maxlength="50" value="#{objetoMBean.objeto.codigo}" requiredMessage="Campo obrigatório"
		disabled="#{objetoMBean.objeto.desabilitado('codigo')}" required="#{objetoMBean.objeto.requerido('codigo')}"/>
</h:panelGroup>

Mas eu SEI que a JSF não permite esse tipo de coisa.
Nas minhas pesquisas a única coisa que encontrei em relação a parâmetros diz respeito a commandLink / commandButton, através do action com param / attribute.
Alguém já passou por esse tipo de necessidade?
A idéia é absurda?

Valeu!!!

3 Respostas

F

Olá rfsilva,

Não sei se entendi plenamente sua necessidade, mas, tente a combinação de jstl com os componentes jsf.

Já tive necessidade similar e funcionou de boa, se nao me engano na pnultima edição da revistas MundoJ saiu algo correlacionado do uso de jstl com jsf.

Dê uma pesquisada, acho que não terá dificuldades, apenas, atente-se que os ciclos de vida sao distintos, 1º jstl 2º jsf, pode parecer simples, mas pode causar grandes problemas e equívocos no desenvolvimento.

Espero que ajude.

R

Olá, fabiomedeirosf !!

Sua sugestão me abriu caminho pra outra alternativa e, para minha surpresa, funcionou!!!

Eu criei um campo no bean do tipo Map<String, Campo>. O objeto Campo possui os atributos “id”, “renderizado”, “desabilitado” e “requerido”. Cada campo do meu objeto é um put no Map (o String é o nome do campo).

Na página, eu simplesmente cito o nome do campo e qual atributo pegar. E pronto!!! Funcionou blzinha!!! Vou tentar extrair um trecho do fonte, e coloco aqui em seguida.

Valeu!!!

Rodrigo

F

Isso mesmo cara, qdo fiz usei de forma bem similar!

Bom trabalho ae!

Criado 25 de julho de 2011
Ultima resposta 25 de jul. de 2011
Respostas 3
Participantes 2