Esse theme bagunça o layout da minha página toda.
Alguém ja trabalhou com ele/
Ajax theme= strtuts 2
15 Respostas
Qual theme?
Ajax theme= strtuts 2
use theme=“simple” para nao ter interferencia no layout
Mas como vou usar theme simple se quero usar o datetimepicker e s:optiontransferselect.
É ou exclusivo é?
Como theme simple não consigo submeter o form quando seleciono algo do optiontransferselect
Já tive problemas com o calendar e encontrei na internet que deveria usar no s:head o theme ajax.
Engraçado é ver no site do struts 2 dizendo
The ajax theme is experimental. Feedback is appreciated!
Em geral eu uso o theme default dele.
http://struts.apache.org/2.0.11.1/docs/themes-and-templates.html
O que acontece quando usa o ajax? Bagunça de que maneira?
Todos os componentes que tem theme=ajax vão para o final da tela, são renderizados fora da ordem.
Se existem 2 divs mas antes destas aparece o componente, o componente é renderizado la embaixo.
E fora que optiontransferselect e datetimepicker só funcionam com esse lance ae do theme ajax.
O que acontece é que quando o theme é = ajax para cada componente ele vai gerando linhas de uma tabela.
Eu adoro struts 2 no controller, mas no view sinceramente não gostei nadinha…
Mas e como eu resolvo isso?
Escoloh entre usar o componente ou não???Preciso utilizar o datetimepicker e o optiontransferselect.
É impossível utilziar esses componentes?
Porque se coloco o optiontrasnferselect como theme= simple ,não consigo submeter o form.
E se coloco o form como simple, da tipo um conflito…
Coloque esta linha no inicio da sua pagina
<s:head theme=“ajax” />
segue o exemplo de uma pagina que eu fiz que usa um componente datepicker
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="my" uri="/WEB-INF/taglib.tld" %>
<s:head theme="ajax" />
<script type="text/javascript" src="<%=request.getContextPath()%>/script/javascript.js"></script>
<div id="conteudo" align="center">
<div id="texto_titulo">
<s:text name="voucher.form_titulo"/>
</div>
<br />
<s:if test="hasActionErrors() || hasFieldErrors() || hasActionMessages()">
<table id="tabela">
<tr>
<td>
<div id="texto_normal">
<s:text name="msg_corrija_erros"/>
</div>
<div id="erros">
<s:actionmessage/>
<s:actionerror/>
<s:fielderror/>
</div>
</td>
</tr>
</table>
</s:if>
<br />
<s:if test="projetosCadastrados.size()>0">
<s:form action="gerVoucher" namespace="/crud" theme="simple">
<table id="tabela">
<tr>
<td><s:text name="voucher.form_row_select_projeto"/></td>
<td><s:select list="projetosCadastrados"
name="idProjeto" listKey="id" listValue="nome"></s:select></td>
</tr>
<tr>
<td><s:text name="voucher.form_row_quantidade"/></td>
<td><s:textfield name="quantidade" /></td>
</tr>
<tr>
<td><s:text name="voucher.form_row_validade"/></td>
<td><s:datetimepicker name="dataValidade"
displayFormat="dd/MM/yyyy" /></td>
</tr>
<tr>
<td><s:text name="voucher.form_row_preco"/></td>
<td><s:textfield name="preco" /></td>
</tr>
<tr>
<td> </td>
<td><s:submit value="Cadastrar" method="salvar" /></td>
</tr>
</table>
</s:form>
</s:if>
<s:else>
<div id="texto_normal"><s:text name="voucher.msg_cadastro_negado"/></div>
</s:else>
<br/>
<s:if test="vouchersCadastrados.size()>0">
<table id="tabela">
<tr>
<th class="titulo">Data de Validade</th>
<th class="titulo">Preço</th>
<th class="titulo">Status</th>
<th class="titulo">Projeto</th>
<th class="titulo">Remover</th>
</tr>
<s:iterator value="vouchersCadastrados">
<tr>
<td><s:property value="dataValidade" /></td>
<td><s:property value="preco" /></td>
<td><s:if test="status">OK</s:if><s:else>Usado</s:else> </td>
<td><s:property value="nomeProjeto" /></td>
<td><s:url id="rem" action="gerVoucher!deletar.action"
namespace="/crud">
<s:param name="idVoucher" value="id" />
</s:url> <s:a href="%{rem}">Remover</s:a></td>
</tr>
</s:iterator>
</table>
</s:if>
</div>
Não ficou desalinhada?
Aproveitando a pergunta.Como faço para um submit ir para um determinado método da action?
E como faço para invocar um método determinado?
na linha 58 tem a resposta
Minha tela continua desalihada
<s:form id="uploadDocumento" name="uploadDocumento" action="uploadDocumento" method="post" enctype="multipart/form-data">
<s:hidden id="quantidadeAutores" name="quantidadeAutores" />
<h1>Publicação de documentos</h1>
<br>
<div id="comboDominio">
<s:select id="taxonomia" name="idTaxonomia" theme="ajax" label="Selecione o domínio de seu documento:"
onchange="submitCombo(this.value)" list="taxonomias" listKey="id" labelposition="top"
headerKey="" headerValue="Selecione" listValue="descricao"
value="idTaxonomia" /> <br>
</div>
<br>
<br>
<s:if test="dominioSelecionado">
<s:div id="tree" theme="ajax">
<OBJECT codetype="application/java" id="Treebolic"
classid="java:treebolic.applet.Treebolic.class"
archive="treebolic.jar"
width="768" height="540">
<PARAM name="xml" value="<s:property value="contentXML" />">
</OBJECT>
</s:div>
<br>
<s:submit value="Selecionar Domínio" theme="ajax" onclick="javascript:getDominio();" />
<input type="button" value="Selecionar Domínio" onclick="javascript:getDominio();">
<br>
<div id="formularioConceitoDocumento">
<h3>Formulário de conceitos do documento</h3>
<br>
<s:textfield id="conceitoSelecionado" name="conceitoSelecionado"
readonly="true" theme="ajax" label="Domínio"/> <br>
<br>
<s:file id="documento" name="documentoModel.documento" theme="ajax" label="Documento"/> <br>
<br>
<s:textfield id="titulo" name="documentoModel.titulo" maxlength="30" theme="ajax" label="Título"/>
<br>
<s:textfield id="autores" name="autores" maxlength="30" theme="ajax" label="Autor(es) (Caso exista mais de um autor digite o nome separado por ;)"/>
<br>
<s:textfield id="orientador" name="documentoModel.orientador"
maxlength="30" theme="ajax" label="Orientador"/> <br>
<br>
<s:datetimepicker name="documentoModel.dataStringInicial"
displayFormat="dd-MM-yyyy" theme="ajax" label="Data de apresenção"/> <br>
<br>
<br>
<s:select id="tipoDocumento"
name="documentoModel.tipoDocumentoModel.id" theme="ajax"
label="Tipo do Documento" list="tiposDocumentos" listKey="id"
headerKey="" headerValue="Selecione" listValue="descricao" /> <br>
<br>
<br>
<s:select id="instituicao" name="documentoModel.instituicaoModel.id" onchange="carregaCursos(this.value)"
theme="ajax" label="Instituição" list="instituicoes" listKey="id"
headerKey="" headerValue="Selecione" listValue="nome" /> <br>
<br>
<br>
<s:select id="curso" name="documentoModel.cursoModel.id"
theme="ajax" label="Curso" list="cursos" listKey="id" headerKey=""
headerValue="Selecione" listValue="nome" /> <br>
<br>
<br>
<s:textarea id="observacao" label="Observações" theme="ajax"
name="documentoModel.observacao" cols="50" rows="10" /> <br>
<s:hidden id="conceitosAssociados" name="conceitosAssociados" />
<br>
<s:label value="Conceitos relacionados" theme="ajax" />
<s:optiontransferselect leftTitle="Domínios disponíveis" id="dominios"
doubleId="dominiosSelecionados" rightTitle="Domínios selecionados"
list="taxonomias" listKey="id" listValue="descricao" multiple="true"
addToLeftOnclick="carregaConceitos();"
addToRightOnclick="carregaConceitos();"
allowUpDownOnLeft="false" allowUpDownOnRight="false"
doubleList="taxonomiasSeleciondas" doubleListKey="id" theme="ajax"
doubleListValue="descricao" doubleName="taxonomiasSeleciondas"
doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" /> <br>
<s:optiontransferselect leftTitle="Conceitos disponíveis"
name="conceitosTaxonomiasSelecionadas" addToLeftOnclick="associaConceitos();"
addToRightOnclick="associaConceitos();" rightTitle="Conceitos selecionados"
list="conceitosTaxonomiasSelecionadas" listKey="id"
listValue="descricao" multiple="true" id="conceitos"
doubleId="conceitosSelecionados" theme="ajax"
allowUpDownOnLeft="false" allowUpDownOnRight="false"
doubleList="conceitosSelecionados" doubleListKey="id"
doubleListValue="descricao" doubleName="documentoModel.conceitos"
doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" /> <br>
<div id="button">
<s:submit value="Publicar Documento" theme="ajax" action="uploadDocumento" labelposition="left"/>
</div>
</div>
</s:if>
</s:form>
note que no exemplo que eu passei para voce
tem essa linha no inicio:
<s:head theme="ajax" />
e o tema dos outros componentes voce deve colocar como simple
como por exemplo:
<s:form action="gerVoucher" namespace="/crud" theme="simple">
parece que voce nao fez estas alteraçoes
no seu codigo eu achei isto:
<s:textarea id="observacao" label="Observações" theme="ajax"
name="documentoModel.observacao" cols="50" rows="10" />
Eu coloquei isso da tag head e fiz a alteração do theme=simple no form e em caa componente, porém a coisa que acontece é que quando eu mecho no componente abaixo(seleciono valores para ele) a página não da submit não passa pela action (debugando percebi isso)
# <s:optiontransferselect leftTitle="Domínios disponíveis" id="dominios"
# doubleId="dominiosSelecionados" rightTitle="Domínios selecionados"
# list="taxonomias" listKey="id" listValue="descricao" multiple="true"
# addToLeftOnclick="carregaConceitos();"
# addToRightOnclick="carregaConceitos();"
# allowUpDownOnLeft="false" allowUpDownOnRight="false"
# doubleList="taxonomiasSeleciondas" doubleListKey="id" theme="ajax"
# doubleListValue="descricao" doubleName="taxonomiasSeleciondas"
# doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" /> <br>
#
# <s:optiontransferselect leftTitle="Conceitos disponíveis"
# name="conceitosTaxonomiasSelecionadas" addToLeftOnclick="associaConceitos();"
# addToRightOnclick="associaConceitos();" rightTitle="Conceitos selecionados"
# list="conceitosTaxonomiasSelecionadas" listKey="id"
# listValue="descricao" multiple="true" id="conceitos"
# doubleId="conceitosSelecionados" theme="ajax"
# allowUpDownOnLeft="false" allowUpDownOnRight="false"
# doubleList="conceitosSelecionados" doubleListKey="id"
# doubleListValue="descricao" doubleName="documentoModel.conceitos"
# doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" />
Coloque o theme do “<s:optiontransferselect” como simple
Não funcionou :(
...
<s:head theme="ajax"/>
</head>
<body>
<s:form id="uploadDocumento" name="uploadDocumento" theme="simple" action="uploadDocumento" method="post" enctype="multipart/form-data">
<s:hidden id="quantidadeAutores" name="quantidadeAutores" />
<h1>Publicação de documentos</h1>
<br>
<div id="comboDominio">
<s:select id="taxonomia" name="idTaxonomia" label="Selecione o domínio de seu documento"
onchange="submitCombo(this.value)" list="taxonomias" listKey="id" labelposition="top"
headerKey="" headerValue="Selecione" listValue="descricao"
value="idTaxonomia" /> <br>
</div>
<br>
<br>
<s:if test="dominioSelecionado">
<s:div id="tree" >
<OBJECT codetype="application/java" id="Treebolic"
classid="java:treebolic.applet.Treebolic.class"
archive="treebolic.jar"
width="768" height="540">
<PARAM name="xml" value="<s:property value="contentXML" />">
</OBJECT>
</s:div>
<br>
<div id="formularioConceitoDocumento">
<h3>Formulário de conceitos do documento</h3>
<br>
Domínio do documento:<br>
<s:textfield id="conceitoSelecionado" name="conceitoSelecionado" label="Domínio"
readonly="true" label="Domínio" labelposition="top"/><input type="button" value="Selecionar Domínio" onclick="javascript:getDominio();">
<br><br>
Arquivo do documento:<br>
<s:file id="documento" name="documentoModel.documento" label="Documento" labelposition="top"/> <br>
<br>
Título:<br>
<s:textfield id="titulo" name="documentoModel.titulo" maxlength="30" label="Título" labelposition="top"/>
<br><br>
Autor(es) (Caso exista mais de um autor digite o nome separado por ";")<br>
<s:textfield id="autores" name="autores" maxlength="30" label="Autor(es) (Caso exista mais de um autor digite o nome separado por ;)" labelposition="top"/>
<br><br>
Orientador: <br>
<s:textfield id="orientador" name="documentoModel.orientador" theme="simple"
maxlength="30" label="Orientador" labelposition="top"/> <br>
<br> <br>
Data da apresentação:<br>
<s:datetimepicker name="documentoModel.dataStringInicial"
displayFormat="dd/MM/yyyy" label="Data de apresenção" labelposition="top"/> <br>
<br>
<br>
Tipo do documento:<br>
<s:select id="tipoDocumento"
name="documentoModel.tipoDocumentoModel.id" labelposition="top"
label="Tipo do Documento" list="tiposDocumentos" listKey="id" theme="simple"
headerKey="" headerValue="Selecione" listValue="descricao" /> <br>
<br>
Instituição: <br>
<s:select id="instituicao" name="documentoModel.instituicaoModel.id" onchange="carregaCursos(this.value)"
label="Instituição" list="instituicoes" listKey="id" labelposition="top" theme="simple"
headerKey="" headerValue="Selecione" listValue="nome" /> <br>
<br>
Curso: <br>
<s:select id="curso" name="documentoModel.cursoModel.id"
label="Curso" list="cursos" listKey="id" headerKey="" theme="simple"
headerValue="Selecione" listValue="nome" labelposition="top" /> <br>
<br>
Observações:<br>
<s:textarea id="observacao" theme="simple" name="documentoModel.observacao" cols="50" rows="10" labelposition="top"/> <br>
<s:hidden id="conceitosAssociados" name="conceitosAssociados" />
<h3><s:label value="Conceitos relacionados" /></h3><br>
Selecione outros domínios que seu documento trata<br><br>
<s:optiontransferselect leftTitle="Domínios disponíveis" id="dominios"
doubleId="dominiosSelecionados" rightTitle="Domínios selecionados"
list="taxonomias" listKey="id" listValue="descricao" multiple="true"
addToLeftOnclick="carregaConceitos();"
addToRightOnclick="carregaConceitos();"
doubleList="taxonomiasSeleciondas" doubleListKey="id" theme="simple"
doubleListValue="descricao" doubleName="taxonomiasSeleciondas"
doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" /> <br>
Selecione outros conceitos que seu documento relaciona<br><br>
<s:optiontransferselect leftTitle="Conceitos disponíveis"
name="conceitosTaxonomiasSelecionadas" addToLeftOnclick="associaConceitos();"
addToRightOnclick="associaConceitos();" rightTitle="Conceitos selecionados"
list="conceitosTaxonomiasSelecionadas" listKey="id"
listValue="descricao" multiple="true" id="conceitos"
doubleId="conceitosSelecionados" theme="simple"
doubleList="conceitosSelecionados" doubleListKey="id"
doubleListValue="descricao" doubleName="documentoModel.conceitos"
doubleHeaderKey="doubleHeaderKey" doubleMultiple="true" /> <br>
<div id="button">
<s:submit value="Publicar Documento" action="uploadDocumento" labelposition="left"/>
</div>
<br>
<br>
</div>
</s:if>
</s:form>
</body>
</html>