psykotico - Clube do Hardware
Microservices, SOA, SaaS, PaaS, Integração, Java, Ruby, NodeJS, NoSQL
psykotico respondeu ao tópico de ruangb em Java
Ok, Desculpe falha minha ... Por estar trabalhando muito com JSON, acabei passando a anotação errada (Sim, caso você queira trabalhar com AJAX, essa seria a anotação correta) .. Desculpe mesmo. vamos a duas soluçoes: A primeira é você anotar com @RequestParam e pegar atributo por atributo. Não é tão simples, mas talvez em casos mais específicos te ajude: @RequestMapping(value="/", method=RequestMethod.POST) public String form(@RequestParam("nome") String nome, @RequestParam("email") String email, @RequestParam("telefone") String telefone, @RequestParam("mensagem") String mensagem) { Contato contato = new Contato(); contato.setNome(nome); contato.setEmail(email); contato.setMensagem(mensagem); contato.set cr.save(contato); return "redirect:/Index"; } A segunda, e acredito que seja a que mais se adeque ao que você deseja (O Thymeleaf automaticamente seta o ModelAttribute quando você utiliza th:object="${contato}") : @RequestMapping(value="/", method=RequestMethod.POST) public String form(@ModelAttribute Contato contato) { cr.save(contato); return "redirect:/Index"; }
psykotico começou a seguir Como pegar o ID do usuário após buscar login JavaFx, Salvar dados do form - Spring Boot, JSF, Hibernate - Foreign key is Null! e e 6 outros 28 de maio
Opa ... No seu Controller, falta anotar o parâmetro para o Spring entender que esse valor está relacionado ao request: @RequestMapping(value="/", method=RequestMethod.POST) public String form(@RequestBody Contato contato) { cr.save(contato); return "redirect:/Index"; }
Java JSF, Hibernate - Foreign key is Null!
psykotico respondeu ao tópico de Doctore em Java
Sim ... Na verdade como você disse que estava aprendendo, achei que trabalhar apenas com valores simples na view e no MB seria mais tranquilo pra você entender. Mas se já está abstraindo isso, perfeito, é assim mesmo
No form, você está mostrando o valor do ID e o nome da pessoa. você pode utilizar um DOM Input hidden pra fazer essa parte e poder recuperar o Id da pessoa pelo menos. <h:inputHidden value="#{user.id}" id="hiddenId" />
O velho caso do Relacionamento Bidirecional ... é terrível e gera vários erros mesmo ... Não é elegante fazer isso, mas meu sono não me deixa pensar em algo melhor ... public void addTelefone(Pessoa pessoa, Telefone telefone) { try { sessao = HibernateUtil.getSessionFactory().openSession(); if (pessoa.getTelefones() == null) { pessoa.setTelefones(new ArrayList<Telefone>()); } pessoa.getTelefones().add(telefone); telefone.setPessoa(pessoa); sessao.save(telefone); transacao.commit(); } catch (Exception e) { e.printStackTrace(); } finally { sessao.close(); } } O Problema do bidirecional é que ele tem problemas para entender que quando você seta um, implicitamente você está setando o outro ... Forçando dessa forma, você garante que o mesmo objeto está sendo setado nos dois lados ...
psykotico respondeu ao tópico de Tefo94 em Java
Exatamente como disse o @Boko Moko. Mas é mais interessante você estudar sobre encapsulamento, na Orientação a Objetos. Assim você começa a entender sobre atributos, métodos e suas características.
psykotico respondeu ao tópico de PaulaFabiana em Java
Existem várias formas. Acredito que a forma mais simples de você fazer isso é inserindo cada linha em uma Lista de Strings, como abaixo: String linha; List<String> lista = new ArrayList<String>() while( (linha = reader.readLine()) != null ){ lista.add(linha); } E depois disso utilizar algum algorítmo de ordenação para ordenar a lista. PORÉM: Se forem números, tome cuidado pos ele tende a ordenar Strings por caractere, o que resulta em algo como [1,10,11,12 ... 2,20,21 ...] ... Assim, teria que se atentar a essa situação ... Outra forma é utilizar a Biblioteca Collections ... Collections.sort(list, comparator); Nesse caso, para evitar a Situação de ordem de números, você teria que implementar a Classe comparator para indicar o maior e menor.
psykotico respondeu ao tópico de Elyton Moreira em Java
É que você tá chamando o método com o seguinte parâmetro: logindao logi = new logindao(); //... logi.Alterar(login.getSenha()); ou seja, você tá passando uma String Senha, para um método e lá você está aguardando que o Objeto seja um LoginBean acredito que deva funcionar se você alterar a chamada do método para: logi.Alterar(login);
Isso exato ... assim você não precisa ficar buscando o código antes de fazer o update e faz tudo num processo apenas ... outra coisa interessante é validar pra ver se ele preencheu o campo senha ... só fazer um !senha.isEmpty() assim ele evita salvar logins com senha vazia ....
Não necessariamente. Veja, se (e exclusivamente se) o campo login for único no banco (ou seja, só vai existir valores diferentes) então qualquer pesquisa por login só vai retornar um campo, correto ... Com isso, na sua pesquisa: String sql = "Select * from usuario where login = ? "; Já faz exatamente o que eu quis dizer. Com isso, seu update ficaria com String sql = "update usuario set senha = ? where login = ?"; Da forma que você está fazendo, dá a chance do usuário mudar inclusive o campo login. Com isso eu posso colocar TODOS os logins da tabela com o mesmo nome, e depois disso, o sistema não conseguirá identificar qual é qual. Exemplo: ++++++++++++++++++++++++++++++++++++++++ | codigo | login | senha | +--------+---------------+-------------+ | 1 | usuario1 | umasenha | | 2 | outrouser | outrasenha | | 3 | maisum | maisoutra | ++++++++++++++++++++++++++++++++++++++++ Se eu no primeiro momento fizer login = "outrouser" terei: Select * from usuario where login = 'outrouser'; o que retornaria o código 2 para a tela. Mas, se depois de atualizar o form eu completar com as informações login = "maisum" e senha = "blabla", eu tenho: update usuario set login = 'maisum',senha = 'blabla' where codigo = 2 O que me resulta em uma tabela assim: ++++++++++++++++++++++++++++++++++++++++ | codigo | login | senha | +--------+---------------+-------------+ | 1 | usuario1 | umasenha | | 2 | maisum | blabla | | 3 | maisum | maisoutra | ++++++++++++++++++++++++++++++++++++++++ E com isso, como seu sistema localizará o usuário "maisum" correto? Porém, se você utilizar a constraint unique para o campo login, nunca terá esse problema de duplicação na coluna, e com isso, você já poderá fazer o update da forma que eu expliquei ali em cima. PS.: Não sei se é o caso, mas por boa prática de segurança, geralmente alteração de senha só é realizada em uma console de admin, ou após o usuário estar logado. Se ele está logado, basta você manter os dados do usuário em um objeto estático (ou um Bean, caso você utilize Injeção de Dependência) e buscar os valores antes do update, só solicitando a senha. Se for numa console admin, como você já listou todos os usuários, você novamente já tem os valores de login na tela de listagem, e pode reaproveitar inclusive o mesmo form para update de senha.
Java metodo validar login com hibernate
psykotico respondeu ao tópico de José Duarte de Barros Neto em Java
Tente com Object result = consulta.getSingleResult(); return result == null; você está solicitando para ele executar uma ação de update no banco, mas é uma query simples ... como você sempre tem o objeto consulta instanciado, ele nunca vai dar false ...
Java Arrastar imagem de um site do navegador para aplicação
psykotico respondeu ao tópico de Fernando Mordini em Java
Acho que esse tópico aqui vai te ajudar: https://stackoverflow.com/questions/8769336/drag-image-from-browser-to-drop-onto-jlabel
psykotico respondeu ao tópico de Bea_99 em Java
no caso a correta seria a resposta 1 ... p.push(8); p.push(15); Object ob = pop(); p.push(23); p.push(ob); p.push(p.top()); p.push(p.pop());
Java Não estou conseguindo fechar o código - Netbeans
psykotico respondeu ao tópico de jajaHB em Java
Cara, analisando seu código me deparei com uma série grande de erros... - No switch case, você finaliza a estrutura, mas abre um "case 2" logo após. Verifica a ordem de chaves pois está completamente errada. - Objeto materias não foi inicializado - Você cria dois objetos com nomes dataNascimento; - valorHoraria não foi criado - chamada do Parser está errada: Interger.Integer.parseInt(...) ou Interger.parseInt(...) ... o correto é Integer.parseInt() - disciolinasExistentes não foi criado - método materias.IndexOutOF não existe ... o correto é materias.indexOf(...) Veja, não consigo nem analisar se há erro de lógica com tanto erro de compilação ... verifique isso antes...
Esse tipo de abordagem é um pouco estranha, já que no fim, a informação que você tem para alterar não é o id, e sim o login ... Apenas pra entender o motivo, porque você quer que apareça os id do usuário na tela de alteração de senha?? Veja, se isso força alguns processos a mais só pra satisfazer esse caminho. você precisaria: - Pesquisar o login no banco para buscar o id do usuário a partir do campo login. - Setar o id do usuário no campo da tela para ele ser exibido. - Executar o comando de update no banco com os valores novos. Se essa necessidade do id não for obrigatória, basta fazer o update com um where apontando apenas o campo login (lembrando que o campo login deve ter constraint de unicidade na tabela)