HtmlCommandButton não executa o método

Bom dia pessoal,

Estou com um problema para utilizar um HtmlCommandButton dinâmico. Eu crio o seguinte botão toda vez que um usuário recebe uma mensagem, como se fosse um chat onde o usuário clica no botao lida e ele deleta akela mensagem da tela.

HtmlCommandButton cmd = new HtmlCommandButton();
		String sId = "message" + id;
		cmd.setId(sId);
		cmd.setValue("Lida");		
		ExpressionFactory ef = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
				MethodExpression me = ef.createMethodExpression(FacesContext.getCurrentInstance().getELContext(),
				"#{usuarioLogadoListBean.messageReaded}", String.class,
				new Class<?>[] {});
		cmd.setActionExpression(me);
	
		
		String action = "#{usuarioLogadoListBean.messageReaded}";
		Class<Object> pars[] = new Class[] {ActionEvent.class}; 
		MethodExpression methodExpression = FacesContext.getCurrentInstance().getApplication().getExpressionFactory()  
		 .createMethodExpression(FacesContext.getCurrentInstance().getELContext(), action , String.class, pars); 
		cmd.setActionExpression(methodExpression);  
		if (usuarioLogado.getMessages().size() > 1) {
			cmd.setOnclick("$(\"#"+sId+"\").remove();");	//estou usando jquery aki e esta lógica ainda sera melhorada, é apenas teste
		} else {
			cmd.setOnclick("$(\"#chatBoxID\").remove();");//estou usando jquery aki
		}
		cmd.addActionListener(FacesContext.getCurrentInstance().getApplication().getActionListener());
		cmd.encodeAll(FacesContext.getCurrentInstance());	
		cmd.setRendered(true);
		cmd.setImmediate(true);

Eu consigo remover a parte da tela, porem nao consigo invocar o metodo “#{usuarioLogadoListBean.messageReaded}” para ele marcar a mensagem como “Lida” e ela nao aparecer novamente qdo o usuario receber outra mensagem. Estou acostumado com Swing e la tem um ActionListener q deve ser implementado para q o botao execute um metodo, mas em web to acostumado com um botao (tipo submit) ter uma action q execute o metodo, porem qdo “debugo” utilizando o firebug o q me aparece no codigo do meu HtmlCommandButton é:

<input id="message0" type="submit" name="message0" value="Lida" onclick="$("#chatBoxID").remove();" class="formInput" />

ou seja, sem um action sendo q na criacao dele eu faço um setAction…

o q devo fazer nesse caso?

valeu!

como está o seu JSP?

Entao kra… ele é montado dinamicamente… com o seguinte codigo:

if (context == null) {
			throw new NullPointerException();
		}
		this.setId("chatBoxID");
		UsuarioLogado usuarioLogado = AdmixSecurityCore.getUsuarioLogado();
		if (!checkRender(usuarioLogado)) {
			super.encodeBegin(context);
			return;
		}

		super.encodeBegin(context);

		ResponseWriter writer = context.getResponseWriter();
		HtmlInputHidden hidden = new HtmlInputHidden();
		hidden.setId(CHAT_MESSAGE_ID);

		hidden.encodeAll(FacesContext.getCurrentInstance());
		StringBuffer sb = new StringBuffer();
		// Linha superior
		sb.append("<table class=\"contentAreaTable\">");
		sb.append("<tr>");
		sb.append("<td class=\"yellow_leftTopBorder\"></td>");
		sb.append("<td class=\"yellow_midTopBorder\"></td>");
		sb.append("<td class=\"yellow_rightTopBorder\"></td>");
		sb.append("</tr>");
		// Corpo
		sb.append("<tr>");
		sb.append("<td class=\"yellow_leftBorder\"></td>");
		sb.append("<td class=\"yellow_mid\">");

		writer.write(sb.toString());
		sb = new StringBuffer();

		sb.append("<table class=\"contentAreaTable\">");
		// sb.append("<tr>");
		// sb.append("<td class=\"chat_message\">");
		// writer.write(sb.toString());
		// sb = new StringBuffer();
		int i = 0;

		for (MessageDTO msg : usuarioLogado.getMessages()) {
			if (!msg.getVisualizado()) {

				sb.append("<tr>");
				sb.append("<td class=\"chat_message\">");
				sb.append(msg.getMessage());
				sb.append("</td>");
				sb.append("<td class=\"chat_message\">");
				writer.write(sb.toString());
				createAjaxButton(msg.getMessage(), i++);
				sb = new StringBuffer();
				sb.append("</td>");
				sb.append("</tr>");
			}
		}

		// usuarioLogado.setMessage(null);
		// sb.append("</td>");
		// sb.append("</tr>");
		sb.append("</table>");
		writer.write(sb.toString());

alguem indicaria pelo menos alguma outra solucao ao inves do htmlcommandbutton ou entao uma maneira de adicionar listeners nele?

valeu!

Ei alguém conseguiu já addionar a um htmlcommandbutton criado dinamicamente um método a ser chamado no seu backin’ bean?

Aliás, para criar qualquer componente dinamicamente o ideal é usar a api createComponente da interface Application:

FacesContext.getCurrentInstance().getApplication().createComponent(...);