====== Actions Futurepages ====== {{ :futurepages2:actions-futurepages.png |}} **Action** é a classe que representa um caso de uso. Recebe as entradas enviadas pelo usuário (input), realiza um processo ao um fim retorna um resultado (output) para a consequência retornada. * Toda classe que herda de **org.futurepages.core.action.AbstractAction** * possui: * os atributos **input** e **output**. * O método que retorna o usuário logado: **DefaultUser loggedUser()** * pode implementar: * DynAction (Action Dinâmica) * AjaxAction (Action Ajax) ===== Padronização ===== ==== Ações Simples ==== Estas são as ações que representam casos de uso simples (NÃO-CRUDs). LoginAction, ProtectedAction e FreeAction. Recomenda-se que para estas actions sejam usados um a dois métodos públicos, dependendo do caso. public class SelecionaTurma extends FreeAction { /** O método execute() como mostrado a seguir já existe na hierarquia das Actions do Futurepages, * sendo desnecessário, já que sobrescreve o método execute() da classe FreeAction com a mesma implementação. * Nesse caso bastaria somente sobrescrever o método listDependencies() */ public String execute() { listDependencies();//joga na saída as dependências de tela, neste caso a lista de todas as turmas. return SUCCESS; } @Override private void listDependencies() { output.setValue("turmas", Dao.list(Turma.class, null, null)); } //Submete a principal funcionalidade da Action. public String submit(int turmaId) { TurmaServices.selecionaTurma(Dao.get(Turma.class, turmaId)); return SUCCESS; } } * Nos casos onde não existe a necessidade de um carregamento de um formulário preliminar, deve existir somente o método público **execute()** onde será executado o caso de uso. Um exemplo seria uma action de **Logout** onde somente clicamos num link para executá-lo. Realizar Logout Selecionar Turma
...
* O nome dessas actions deve denotar seu caso de uso, geralmente seguem o padrão "FazAlgumaCoisa" ou um apelido que denota a ação. * Exemplos: **LiberaUsuario, AlteraSenha, Login, Logout, DistribuiProcesso**. * O mapeamento dessas actions no [[ModuleManager]] será o mesmo nome da classe: action("AlteraSenha",AlteraSenha.class); action(DistribuiProcesso.class); //opção que pega o nome por reflexão ==== Ações CRUD (CrudActions) ==== * As CrudActions podem ser **ProtectedCrudActions** ou **FreeCrudActions**, elas são actions especiais que contemplam o CRUD básico de Beans. * Nome Padrão: **BeanActions** Nome do Bean seguido de "Actions". * Mapeamento do ModuleManager: É suprimido o nome "Actions" action("Aluno",AlunoActions.class); //Action de Crud do bean Aluno .filter(new VOFilter("aluno", Aluno.class)) .on(UPDATE, fwIn("Aluno.update.page")) .on(SUCCESS, UPDATE, fwIn("Aluno.update.page")) .on(ERROR, UPDATE, fwIn("Aluno.update.page")) ; * Desta forma para exibir um aluno cuja matrícula é **9090** o usuário solicitaria **Aluno.fpg?matricula=9090** * Para abrir tela de alteração deste mesmo aluno teríamos: **Aluno.fpg?type=update&matricula=9090** * Para submeter a tela de atualização teríamos o seguinte trecho de código:
...
==== AjaxAction ==== em breve... ==== DynAction ==== em breve...