Estou com duvidas quanto ao desenvolvimento com Ajax e V|Raptor
No JSF, implementei um lista que é atualizada via Ajax, e com chamada de método do bean, desta forma:
Painel a ser atualizado pelo Ajax:
<h:panelGroup id="ajax">
.....
</h:panelGroup>
Chamada do metodo com ajax:
<h:commandButton value="#{msg['button.adicionar']}" action="#{conhecimentoBean.separarTags}" styleClass="btn btn-success" style="margin-left: 10px">
<f:ajax execute="string" render="ajax"/>
</h:commandButton>
Porem preciso da mesma logica no V|Raptor com Ajax e estou tendo dificuldade em implementar essa chamada de método e atualização de parte do html!
com o VRaptor vc vai usar alguma biblioteca javascript pra fazer isso, como o jQuery.
algo como:
<input type="button" id="adicionar" value="Adicionar" data-action="${linkTo[ConhecimentoController].separarTags}" />
<div id="resultado"></div>
...
<script>
$('#adicionar').click(function() {
$('#resultado').load($(this).attr('data-action'));
});
</script>
Lucas,
Implementei a parte que me passou, porem estou com duvidas com o controller:
public class ConhecimentoController {
private final Result result;
private final ConhecimentoRepository repository;
private final Validator validator;
public ConhecimentoController(Result result, ConhecimentoRepository repository, Validator validator) {
this.result = result;
this.repository = repository;
this.validator = validator;
}
@Public
@Get("/conhecimento/criar")
public void criar(Conhecimento entity) {
result.include("entity", entity)
.include("categoriaTypes", CategoriaType.values());
}
@Public
@Post("/conhecimento")
public void salvar(Conhecimento entity) {
// dados default
entity.setDataCadastro(new Date());
entity.setAtivo(Boolean.TRUE);
// tags ???
//entity.setTagList(lista_tags);
validator.validate(entity);
validator.onErrorRedirectTo(this).criar(entity);
try {
entity = repository.save(entity);
result.include("notice", Utils.i18n("salvo.sucesso")).redirectTo(IndexController.class).index();
} catch (CommonException e) {
result.include("error", Utils.i18n(e.getMessage())).redirectTo(this).criar(entity);
}
}
Observe o detalhe:
// tags ???
//entity.setTagList(lista_tags);
A duvida é… como alimentar a lista lista_tags
com vários objetos Tags, setando seus atributos com o valor do <intput>
(tag) e de um <select>
(categoria)
Obs: O ajax que me passou serve para atualizar a div e o usuário posteriormente continuar preenchendo sem perder o cadastro de conhecimento.
Não sei se ficou claro a duvida, qualquer coisa me pergunta.
para criar uma lista, é só vc colocar indices nos parametros:
entity.tagList[0].umAtributo=x
entity.tagList[0].outroAtributo=y
entity.tagList[1].umAtributo=z
entity.tagList[1].outroAtributo=w
…