====== 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...