Свойство [фамилия] не найдено для типа [controller.AppController]. Почему?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Свойство [фамилия] не найдено для типа [controller.AppController]. Почему?

Сообщение Anonymous »

Я пытаюсь завершить внедрение базы данных учетных записей пользователей, включая процесс регистрации. К сожалению, спящий режим, похоже, не находит необходимых свойств.
Во время исследования передо мной стояла задача безопасно сохранять пароли в заданной базе данных. Эта часть удалена в исходном коде. (Это не было проблемой, но на других участников исследования можно было повлиять.) Я уже пытался комментировать/ракомментировать аннотации ManagedProperty в AppController.java и AppUser.java во всех возможных комбинациях, но ни одна из них, похоже, не привела к результату. мне дальше к решению. Были добавлены только сообщения с «циклическими ссылками».
Многие другие вопросы SE, касающиеся той же проблемы, по-видимому, пренебрегают правильным именованием методов получения или установки или правильным синтаксисом аннотаций, но это кажется в моем случае это не проблема.
Я впервые использую спящий режим, поэтому я несколько растерялся. (Например, я не знаю, должна ли аннотация быть установлена ​​точно перед объявлением аннотированной переменной.) Переименование AppController.hbm.xml в Appuser.hbm.xml также не решает проблему.
Я надеюсь, что проблема достаточно проста, чтобы ее могли увидеть такие эксперты, как вы, поскольку полный минимальный пример потребует довольно много файлов.
Appuser. java:

Код: Выделить всё

package model;

import javax.faces.bean.ManagedProperty;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import org.hibernate.validator.constraints.NotBlank;

@Entity
@Table(name="APPUSER")
public class Appuser {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Size(min=3, max=50)
@Column(name = "FIRSTNAME", nullable = false)
@ManagedProperty(value = "#{appController.firstname}")
private String firstname;

@Size(min=3, max=50)
@Column(name = "SURNAME", nullable = false)
@ManagedProperty(value = "#{appController.surname}")
private String surname;

@NotNull
@Column(name = "BIRTHDATE", nullable = false)
private Date birthdate;

@NotBlank
@Column(name = "EMAIL", nullable = false)
private String email;

@NotBlank
@Column(name = "GENDER", nullable = false)
//    @ManagedProperty(value = "#{appController.gender}")

private String gender;

@NotBlank
@Column(name = "USERNAME", nullable = false)
private String username;

@NotBlank
@Column(name = "SALTED_HASED_PW", nullable = false)
private String salted_hash;

@NotBlank
@Column(name = "SALT", nullable = false)
private byte[] salt;

public Appuser() {
firstname = new String();
surname = new String();
birthdate = new Date();
email = new String();
username = new String();
salted_hash = new String();
salt = new byte[64];
}

public byte[] getSalt() {
return salt;
}

public void setSalt(byte[] salt) {
this.salt = salt;
}

public String getFirstname() {
return firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getSurname() {
return surname;
}

public void setSurname(String surname) {
this.surname = surname;
}

public Date getBirthdate() {
return birthdate;
}

public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getSalted_hash() {
return salted_hash;
}

public void setSalted_hash(String salted_hash) {
this.salted_hash = salted_hash;
}
}
AppController.java:

Код: Выделить всё

package controller;

import java.beans.Transient;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import java.security.SecureRandom;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.SecretKey;

// ...  security imports

import model.Appuser;
import dao.UserDAO;

@ManagedBean(name = "appController", eager = true)
@RequestScoped
public class AppController{

private byte salt[] = new byte[64];

//    @ManagedProperty(value = "#{appController.firstname}")
private UserDAO dao;
private String firstname;
//    @ManagedProperty(value = "#{appController.surname}")
private String surname;
//    @ManagedProperty(value = "#{appController.birthdate}")
private Date birthdate;
//    @ManagedProperty(value = "#{appController.email}")
private String email;
//    @ManagedProperty(value = "#{appController.gender}")
private String gender;
//    @ManagedProperty(value = "#{appController.username}")
private String username;
//    @ManagedProperty(value = "#{appController.password}")
private String password;

public String registration() {
return "registration";
}

public boolean saveUser() throws NoSuchAlgorithmException, InvalidKeySpecException {
Appuser newUser = new Appuser();
newUser.setFirstname(firstname);
newUser.setSurname(surname);
newUser.setBirthdate(birthdate);
newUser.setEmail(email);
newUser.setGender(gender);
newUser.setUsername(username);

newUser.setSalt(salt);
// use of a crypto library to generate a variable k not relevant for the issue
newUser.setSalted_hash(k.getClass().descriptorString());
boolean had_success = dao.save(newUser);
if (had_success == false) {
System.out.println("There occured an error. Most probably, the username is yet in the database.");
return false;
}
else
return true;
}
}
AppController.hbm.xml:

Код: Выделить всё







This class contains the app user detail.

















registration.xhtml:

Код: Выделить всё






SportSnapShare









SportSnapShare Registration





































Ожидаемым результатом после «Запустить на сервере» в Eclipse должен быть сайт регистрации, который позволит мне создать несколько тестовых учетных записей пользователей и безопасно сохранить их в базе данных (к которой я могу получить доступ и поэтому контролируйте результат).
Фактическим результатом является сайт с сообщением об ошибке HTTP с сообщением
"Message /registration.xhtml @27,91 value="#{appController.surname}": свойство [surname] не найдено в типе [controller.AppController]"
, за которым следует:

Код: Выделить всё

Exception
javax.servlet.ServletException: /registration.xhtml @27,91 value="#{appController.surname}": Property [surname] not found on type [controller.AppController]
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause
javax.el.PropertyNotFoundException: /registration.xhtml @27,91 value="#{appController.surname}": Property [surname] not found on type [controller.AppController]
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
javax.faces.component.UIOutput.getValue(UIOutput.java:174)
javax.faces.component.UIInput.getValue(UIInput.java:291)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause
javax.el.PropertyNotFoundException:  Property [surname] not found on type [controller.AppController]
javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:260)
javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:212)
javax.el.BeanELResolver.property(BeanELResolver.java:347)
javax.el.BeanELResolver.getValue(BeanELResolver.java:92)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
javax.faces.component.UIOutput.getValue(UIOutput.java:174)
javax.faces.component.UIInput.getValue(UIInput.java:291)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Hinweis Der komplette Stacktrace der Ursache ist in den Server logs zu finden
Похоже, что эти сообщения не содержат конкретной ссылки на какой-либо (потенциально ошибочный) файл в моем проекте. Соответствующие журналы сервера, похоже, не созданы на текущий день (несмотря на то, что я не менял конфигурацию Tomcat).
Структуру моих папок можно просмотреть здесь:
Изображение
(Мне не удалось вставить изображение с помощью управляемого редактора, несмотря на знание теории.)
Заранее большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/582 ... roller-why
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»