Rev 1577 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>Teste aos Controladores de Widgets de Exemplo</h1>
<h2>Ficheiros biblioteca, não são para alterar</h2>
<ul>
<li>conf/WEB-INF/struts/tiles-jsonwidget.xml (Layouts de Respostas JSON)</li>
<li>conf/WEB-INF/struts/struts-jsonwidget.xml (Global Forwards de Respostas JSON)</li>
<li>classe para extender controladores pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController</li>
</ul>
<h2>Ficheiro de Configuração de exemplo para novos Controladores de Widgets</h2>
<ul>
<li>conf/WEB-INF/struts/examples/struts-example/jsonwidget.xml</li>
</ul>
<h2>Controladores e form de Exemplo</h2>
<ul>
<li>classe de Exemplo pt.estgp.estgweb.web.controllers.examples.jsonwidget.JsonWidgetExampleForm</li>
<li>classe de Exemplo pt.estgp.estgweb.web.controllers.examples.jsonwidget.WidgetExampleController</li>
</ul>
<h2>Chamadas de Exemplo do Serviço AJAX/JSON</h2>
<p>Os exemplos de chamada das bibliotecas JavaScript são um nível de abstração acima destes exemplos</p>
<ul>
<li>
<a href="<%=request.getContextPath()%>/widgetWithValidationExample.do?dispatch=executeService&serviceJson=serviceClean&nome=teste">
Teste de um servico sem erros e com validacao
</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/widgetWithValidationExample.do?dispatch=executeService&serviceJson=serviceClean">
Teste de um servico com erros e com validacao onde foi omitido o campo nome que é obrigatório
</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/widgetExample.do?dispatch=executeService&serviceJson=serviceException">
Teste de um servico com uma excepção
</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/widgetExample.do?dispatch=executeSimpleServiceOkFail&serviceJson=serviceSimpleOkExample">
Teste de um servico Tipo Ok ou Fail Simples
</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/widgetExample.do?dispatch=executeSimpleServiceOkFail&serviceJson=serviceSimpleFailExample">
Teste de um servico Tipo Ok ou Fail Simples com FALHA
</a>
</li>
</ul>
<h2>Como usar as bilbiotecas de chamada AJAX</h2>
<p>
Bibliotecas de alto nível. Libertam o developer para a colocação de mensagens e para a interpretação do estado de resposta a um pedido,
bastando haver um div com a class web-messages dentro do Form. O developer apenas tem de programar os handlers de sucesso e de falha.</p>
<p>Existem dois tipos de chamadas possiveis, as que devolvem um objecto json e as simples que apenas devolvem ok ou fail através da invocação do handler respectivo</p>
<div class="web-messages"><div class="alert alert-info">Exemplo Div para mensagens WEB mas nao é afectado pelo form</div> </div>
<p>Form de Struts com Auto preenchimento de Campos mas invoca um Widget Controller</p>
<html:form styleClass="form-horizontal" action="/widgetWithValidationExample" onsubmit="return false;">
<div class="web-messages">Aqui vão aparecer as mensagens de Erro ou de Feedback do Widget</div>
<div class="form-group">
<label>Nome</label>
<html:text styleClass="form-control" property="nome"/>
</div>
<div>
<script>
function widgetCallClean(form)
{
widgetCall('serviceClean',form,
function(response)
{
alert("Accao de resposta terminada: " + response.dataExample);
});
}
function widgetCallWithErrors(form)
{
widgetCall('serviceWithErrors',form,
function(response)
{
alert("Accao de resposta terminada: " + response.dataExample);
},
function(response)
{
alert("Accao Falhou mas as resposta foi esta: " + response.dataExample);
});
}
function widgetCallExceptionTest(form)
{
widgetCall('serviceException',form,
function(response)
{
alert("Accao de resposta terminada: " + response.dataExample);
});
}
function widgetChamadaSimples(form)
{
widgetSimpleCall('serviceSimpleOkExample',form,
function()
{
alert("OK");
},
function()
{
alert("Fail");
});
}
function widgetChamadaFalha(form)
{
widgetSimpleCall('serviceSimpleFailExample',form,
function()
{
alert("OK");
},
function()
{
alert("Fail");
});
}
</script>
<p>(Pode usar ou nao o campo "nome" para ver o resultado da validação do Form. Quando a validacao do form nao passa apenas vem uma falha e uma lista de erros, quando a falha é propositada dentro do controller com a adicao de erros é possivel enviar o objecto json como resposta)</p>
<button class="btn btn-success" type="button" onclick="widgetCallClean(this.form)">Submeter Simulacao Servico OK</button>
<button class="btn btn-warning" type="button" onclick="widgetCallWithErrors(this.form)">Submeter Simulacao Servico Com Erros</button>
<button class="btn btn-danger" type="button" onclick="widgetCallExceptionTest(this.form)">Submeter Simulacao Servico Com Excepção</button>
<button class="btn btn-success" type="button" onclick="widgetChamadaSimples(this.form)">Submeter Simulacao Servico SIMPLES OK/FAIL TUDO OK</button>
<button class="btn btn-warning" type="button" onclick="widgetChamadaFalha(this.form)">Submeter Simulacao Servico SIMPLES OK/FAIL FALHA</button>
</div>
</html:form>