Problema com JSF e commands immediate

3 respostas
R

Olá pessoal!

Tenho o seguinte código:

<f:view>
    <h:form>
	 <h:inputText binding="#{testeMb.txtTeste}" size="40" disabled="true">
         </h:inputText>
         <h:commandButton actionListener="#{testeMb.esconder}" value="Testar" id="testar" immediate="true">
         </h:commandButton>
         <h:commandButton value="Esconder" actionListener="#{testeMb.esconder}" immediate="true">
         </h:commandButton>
          <h:panelGroup binding="#{testeMb.panel}" rendered="false">
        	<h:dataTable border="1" value="#{testeMb.lista}" var="nome">
	        	<h:column id="column1">
					<h:commandLink actionListener="#{testeMb.testar}" immediate="true">
						<h:outputText value="#{nome}"></h:outputText>
					</h:commandLink>
					<f:facet name="header">
						<h:outputText value="Coluna"></h:outputText>
					</f:facet>
				</h:column>
			</h:dataTable>
		</h:panelGroup>
	</h:form>
</f:view>
public class MB_Teste
{
	private HtmlInputText txtTeste;
	
	private HtmlPanelGroup panel;
	
	private DataModel lista = new ListDataModel();

	public HtmlInputText getTxtTeste()
	{
		return txtTeste;
	}

	public void setTxtTeste(HtmlInputText txtTeste)
	{
		this.txtTeste = txtTeste;
	}
	
	public void testar(ActionEvent event)
	{
		String nome = lista.getRowData().toString();
		txtTeste.setValue(nome);
		
		FacesContext.getCurrentInstance().renderResponse();
	}
	
	public void esconder(ActionEvent event)
	{
		if(event.getComponent().getId().equals("testar"))
			panel.setRendered(true);
		
		else
			panel.setRendered(false);
		
		FacesContext.getCurrentInstance().renderResponse();
	}

	public HtmlPanelGroup getPanel()
	{
		return panel;
	}

	public void setPanel(HtmlPanelGroup panel)
	{
		this.panel = panel;
	}

	public DataModel getLista()
	{
		List<String> lista = new ArrayList<String>();
		lista.add("Teste 1");
		lista.add("Teste 2");
		
		this.lista.setWrappedData(lista);
		
		return this.lista;
	}

	public void setLista(DataModel lista)
	{
		this.lista = lista;
	}
}

Se colocar o inputText disabled=“false” então a ação do link não funciona.
Alguém sabe porquê?

3 Respostas

U

tu ta fazendo as coisas do modo mais dificil,
use value="#{bean.propriedade}"
para alterar o valor das coisas …
remova as chamadas para FacesContext.getCurrentInstance().renderResponse(); que não estão fazendo nada.

e recomendo utilizar se possivel mais de um form na página em vez de immediate=“true”

R

Foi mal galera …

Na verdade se colocar disabled=“true” FUNCIONA. O contrário que não funciona.

Mas se colocar assim no método funciona mesmo estando disabled=“false”:

public void testar(ActionEvent event)
   {
      String nome = lista.getRowData().toString();
      //txtTeste.setValue(nome);
      txtTeste.setSubmittedValue(nome);

      FacesContext.getCurrentInstance().renderResponse();
   }

A especificação, pelo que entendi, diz que esse setSubmittedValue não deveria ser utilizado assim, mas foi assim que consegui!
Valeu!

R

Se eu utilizar mais de um Form, como faço para um só command submeter tudo?

Por exemplo, em um form eu tenho inputs com validadores. Mais embaixo tem outro que ficou no lugar da parte que tem immediate=“true”. Embaixo teria um commandButton que deve submeter tudo e o validadores devem funcionar … eu tentei mas não consegui! Por isso fiz da forma que postei!

Criado 24 de julho de 2007
Ultima resposta 24 de jul. de 2007
Respostas 3
Participantes 2