[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Mensagens enviadas por: rogel.garcia  XML
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 ... 5, 6, 7 ... 17, 18, 19 Próximo 
Autor Mensagem
paulo.. vc postou o ClienteDAO.... e o MuncipioDAO?
pedro... e se ele nao quiser que seja mapeado assim...?

o importante é resolvrer um problema de cada vez... porque se nao..vc nao sabe o que tá resolvendo pq aumentam muito as variaveis
Nao muda o seu jsp nao.. deixe ele como está.. sem o comboReloadGroup por enquanto.. (até o combo de municipio ser preenchido)

Vc tem um MunicipioDAO? tem como vc postar ele aqui?
Supondo que vc tenha o seguinte bean

class Bean {
List<Estrutura> estruturas;
}

e

<t:property name="estruturas"/>

Será criado um select-many e as estruturas selecionadas estarão no atributo estruturas... o mesmo aconteceria se fosse Estrutura[] estruturas.


O erro acontece porque vc está tentando colocar um input select-many para uma propriedade do tipo Estrutura.
O NEO permite, o problema acontece é só com o hibernate mesmo...

Não tem interferencia do neo nesse caso...

Nós já enfrentamos vários problemas com o hibernate.. por isso recomendamos o padrao.. para evitar tais problemas..
O hibernate tem muitas falhas...

Vc tem um MunicipioDAO?
e o problema é que os itens de uf nao estao sendo carregados?!

vc tem um UfDAO? Para os combos serem carregados automaticamente, é necessário que esteja criado um dao para o bean... o nome da classe deve ser o nome do bean + DAO
Como está o seu JSP?
guilherme.. para fazer essa funcionalidade genérica vc faz o seguinte..

cria um <span id=""></span> pra cada propriedade, e coloca ao lado do input no seu PropertyTag.jsp

(voce já deve ter isso)

vc deve ter algo parecido com
<span id="msg.area"></span>

No property vc coloca:
Code:
 <t:property name="area" label="Area" onchange="loadSecondDescription(this)" />
 

e cria o seguinte javascript

Code:
 <script type="text/javascript">
 	function loadSecondDescription(property){
 		var value = property.value;
 		var div = 'msg.'+property.name;
 		sendRequest('${pageContext.request.contextPath}/modulo/secondDescription', 
 		'bean='+value+'&descriptionarea='+div,
 		'POST',
 		callbackSecondDescription);
 	}
 	
 	function callbackSecondDescription(data){
 		eval(data);
 	}
 </script>
 


Você cria a anotation:

Code:
 package annotations;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface SecondDescription {
 
 }
 


e anota a propriedade desejada

Code:
 @SecondDescription
 public String getDescricao(){...}
 



Faz um controller como o seguinte:
Code:
 package controller;
 
 import java.lang.reflect.Method;
 
 import annotations.SecondDescription;
 import br.com.linkcom.neo.controller.Controller;
 import br.com.linkcom.neo.controller.DefaultAction;
 import br.com.linkcom.neo.controller.MultiActionController;
 import br.com.linkcom.neo.core.standard.ApplicationContext;
 import br.com.linkcom.neo.core.standard.Neo;
 import br.com.linkcom.neo.core.web.WebRequestContext;
 import br.com.linkcom.neo.persistence.GenericDAO;
 import br.com.linkcom.neo.util.Util;
 import br.com.linkcom.neo.view.ajax.View;
 
 @Controller(path="/modulo/secondDescription")
 public class SecondDescriptionController extends MultiActionController {
 
 	@DefaultAction
 	public void getSecondDescription(WebRequestContext request, BeanHolder beanHolder){
 		Object bean = beanHolder.getBean();
 		if(bean != null){
 			String secondDescriptionProperty = getSecondDescriptionPropertyName(bean.getClass());
 			if(secondDescriptionProperty != null){
 				GenericDAO<Object> dao = getDaoForBean(bean);
 				bean = dao.load(bean);
 				
 				ApplicationContext applicationContext = request.getApplicationContext();
 				Object secondDescriptionValue = applicationContext
 						.getBeanDescriptor(bean)
 							.getPropertyDescriptor(secondDescriptionProperty)
 								.getValue();
 				
 				String div = request.getParameter("descriptionarea");
 				String value = Util.strings.toStringDescription(secondDescriptionValue);
 				View.getCurrent()
 						.eval("document.getElementById('"+div+"').innerHTML " +
 								" = '"+value+"';");
 			}			
 		}
 	}
 
 	@SuppressWarnings("unchecked")
 	private GenericDAO<Object> getDaoForBean(Object bean) {
 		try {
 			return (GenericDAO<Object>) Neo.getObject(Class.forName("dao."+bean.getClass().getSimpleName() + "DAO"));
 		} catch (Exception e) {
 			throw new RuntimeException("Não foi possível encontrar um DAO para "+bean, e);
 		}
 	}
 
 	/**
 	 * Esse método retorna qual é o nome da propriedade que possui a anotacao @SecondDescription
 	 * ou null se nenhuma tiver...
 	 * @param classe
 	 * @return
 	 */
 	private String getSecondDescriptionPropertyName(Class classe) {
 		Method[] declaredMethods = classe.getDeclaredMethods();
 		for (Method method : declaredMethods) {
 			if(method.isAnnotationPresent(SecondDescription.class)){
 				return Util.strings.uncaptalize(method.getName().substring(3));
 			}
 		}
 		return null;
 	}
 }
 


Pronto.. com esse código voce pode carregar o second description de qualquer propriedade..
Se vc desejar que todas as propriedades tenha um secondDescription vc pode colocar o onchange no template... e o javascript em um arquivo .js dentro da pasta /js que ele será carregado pelo neo...
Você terá que alterar os paths na funcao javascript e no controller e também o pacote dos daos da sua aplicacao no método getDaoForBean...
Eu utilizei algumas classes auxiliares do neo... mas isso poderia ser feito sem elas.. com um pouco mais de trabalho..

até mais...
robmsjr, realmente um bug que acontece quando o nome da propriedade tem colchetes.. que é o seu caso.. na próxima versão estará corrigido.. ou vc pode colocar dentro do seu src o arquivo...

/br/com/linkcom/neo/view/InputTag-select_one_button.jsp

com o seguinte código:
Code:
 <!-- Valor selecionado ${tag.valueToString} -->
 <input type="text" name="${tag.name}_label" id="${tag.id}" onchange="${tag.reloadOnChangeString}" readonly="true" value="${tag.descriptionToString}" ${tag.dynamicAttributesToString}/>
 <input type="hidden" name="${tag.name}" value="${tag.valueWithDescriptionToString}" />
 <button id="${tag.name}_btn" name="${tag.name}_btn" type="button" onclick="${tag.selectOneButtonOnClick} " style='${tag.selectOneButtonStyle}'>Selecionar</button>
 <button id="${tag.name}_btnUnselect" name="${tag.name}_btnUnselect" type="button" onclick="document.getElementsByName('${tag.name}_label')[0].value = ''; document.getElementsByName('${tag.name}')[0].value = '<null>'; document.getElementById('${tag.name}_btn').style.display=''; document.getElementById('${tag.name}_btnUnselect').style.display='none'" style='${tag.selectOneUnselectButtonStyle}'>Limpar</button>
 
 


A alteração ocorreu na ultima linha...
onde tinha

Code:
${tag.name}_label.value = ''; ${tag.name}.value = '<null>'; 


passou a ser

Code:
document.getElementsByName('${tag.name}_label')[0].value = ''; document.getElementsByName('${tag.name}')[0].value = '<null>'; 


Valew
Talvez tenha dado algum problema no deploy... (as vezes dá uns paus se vc troca um jar ou outro) aí tem que limpar o deploy e publicar denovo
no getNome

tem assim

@Column(name="NM_META", length=100, nullable=false)

tenta tirar o nullable pra ver se rola...

@Column(name="NM_META", length=100)

para o neo validar o lenght vc pode colocar

@MaxLength(100)
blz robmsjr... talvez eu demore um pouquinho para te dar a resposta.. pq esses dias estao meio turbulentos.. e eu vou ter que analizar muita coisa.. pq esse erro é incomum..

mas eu vou te responder....

[se for possível.. utilize um combo normal por enquanto até eu descobrir o que pode ter dado errado]
deve tá faltando na sua tela de entrada de dados o campo primary key...


se o seu primary key for id...


tem que colocar na entrada


<t:property name="id"/>
Aí complica um tikinho..

vc vai ter que fazer algo mais ou menos assim

<n:dataGrid .... rowonclick="selectItem(this)">


function selectItem(row){
var td = row.cells[0]; //supondo que o id esteja na primeira coluna
var id = td.childNodes[0].innerHTML;
// faça algo com o id aqui
}
é meio gambiarra mas é o único jeito.. visto que na linha nao é possível saber qual é o bean em questao..

[na arquitetura do neo 4.. seria possivel ]

Se bobear eu coloco algo na versao 3 pra vc poder saber sobre qual bean é a linha.. mas é numa versao mais pra frente.. pq tem um bocadinho de coisa na fila.. heheh
 
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 ... 5, 6, 7 ... 17, 18, 19 Próximo 
Ir para:   
Powered by JForum 2.1.7 © JForum Team