gpt4 book ai didi

java - 卡在 ManagedBean Pre ProcessingException : Unexpected error processing managed bean

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:15 25 4
gpt4 key购买 nike

谁能帮我们解决这个问题?

我们正在尝试在我们的 JSF 应用程序中创建注册用户功能。我们希望用户在注册后立即登录。在用户点击我是新客户端命令链接后,我们有这个异常,我们不知道如何处理它:

com.sun.faces.mgbean.ManagedBeanPreProcessingException: Unexpected error processing managed bean registerBean
at com.sun.faces.mgbean.BeanManager.preProcessBean(BeanManager.java:394)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:260)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:99)
at com.sun.el.parser.AstValue.getValue(AstValue.java:158)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.faces.mgbean.ManagedBeanPreProcessingException: Unexpected error processing managed property loginBean
at com.sun.faces.mgbean.ManagedBeanBuilder.bake(ManagedBeanBuilder.java:117)
at com.sun.faces.mgbean.BeanManager.preProcessBean(BeanManager.java:349)
... 50 more
Caused by: java.lang.NullPointerException
at com.sun.faces.mgbean.ManagedBeanBuilder.bakeBeanProperty(ManagedBeanBuilder.java:350)
at com.sun.faces.mgbean.ManagedBeanBuilder.bake(ManagedBeanBuilder.java:107)
... 51 more

这是 LoginBean 和 RegisterBean:

@ManagedBean
@SessionScoped
public class LoginBean
{
private String username, password;
private User user;
private UserManager um = UserManager.getInstance();

/**
*
*/
public LoginBean()
{
super();
}

/**
* @return the username
*/
public String getUsername()
{
return username;
}

/**
* @return the password
*/
public String getPassword()
{
return password;
}

public void setUser(User user)
{
this.user = user;
username = user.getUsername();
password = user.getPassword();
}

/**
* @return the user
*/
public User getUser()
{
return user;
}

/**
* @param username
* the username to set
*/
public void setUsername(String username)
{
this.username = username;
}

/**
* @param password
* the password to set
*/
public void setPassword(String password)
{
this.password = password;
}

public String nextPage()
{
try
{
user = um.getUser(username, password);
}
catch (NoResultException e)
{
return "failure" + REDIRECT;
}

if (user instanceof Client)
return "home_client" + REDIRECT;

return "home_admin" + REDIRECT;

}
}

@ManagedBean
@RequestScoped
public class RegisterBean
{
private String username, password, repassword, firstname, lastname, email, address, city, county, postcode, country, phone;

@ManagedProperty(value = "#{loginBean}")
private LoginBean loginBean;

// private UserManager um = UserManager.getInstance();

public RegisterBean()
{
}

/**
* @return the username
*/
public String getUsername()
{
return username;
}

/**
* @return the password
*/
public String getPassword()
{
return password;
}

/**
* @return the repassword
*/
public String getRepassword()
{
return repassword;
}

/**
* @return the firstname
*/
public String getFirstname()
{
return firstname;
}

/**
* @return the lastname
*/
public String getLastname()
{
return lastname;
}

/**
* @return the email
*/
public String getEmail()
{
return email;
}

/**
* @return the address
*/
public String getAddress()
{
return address;
}

/**
* @return the city
*/
public String getCity()
{
return city;
}

/**
* @return the county
*/
public String getCounty()
{
return county;
}

/**
* @return the postcode
*/
public String getPostcode()
{
return postcode;
}

/**
* @return the country
*/
public String getCountry()
{
return country;
}

/**
* @return the phone
*/
public String getPhone()
{
return phone;
}

/**
* @return the user
*/
public LoginBean getLoginBean()
{
return loginBean;
}

/**
* @param username
* the username to set
*/
public void setUsername(String username)
{
this.username = username;
}

/**
* @param password
* the password to set
*/
public void setPassword(String password)
{
this.password = password;
}

/**
* @param repassword
* the repassword to set
*/
public void setRepassword(String repassword)
{
this.repassword = repassword;
}

/**
* @param firstname
* the firstname to set
*/
public void setFirstname(String firstname)
{
this.firstname = firstname;
}

/**
* @param lastname
* the lastname to set
*/
public void setLastname(String lastname)
{
this.lastname = lastname;
}

/**
* @param email
* the email to set
*/
public void setEmail(String email)
{
this.email = email;
}

/**
* @param address
* the address to set
*/
public void setAddress(String address)
{
this.address = address;
}

/**
* @param city
* the city to set
*/
public void setCity(String city)
{
this.city = city;
}

/**
* @param county
* the county to set
*/
public void setCounty(String county)
{
this.county = county;
}

/**
* @param postcode
* the postcode to set
*/
public void setPostcode(String postcode)
{
this.postcode = postcode;
}

/**
* @param country
* the country to set
*/
public void setCountry(String country)
{
this.country = country;
}

/**
* @param phone
* the phone to set
*/
public void setPhone(String phone)
{
this.phone = phone;
}

public String register()
{
this.loginBean.setUser(new Client(username, password, new ContactDetails(firstname, lastname, email, address, city, county, postcode, country, phone)));

return "home_client" + REDIRECT;
}
}

这是来自 login.xhtml 的登录表单:

<h:form>
Username: <h:inputText value="#{loginBean.username}" />
<br />
Password: <h:inputSecret value="#{loginBean.password}" />
<br />
<h:commandButton value="Login" action="#{loginBean.nextPage}" />
<h:commandLink value="I'm a new client" action="register"></h:commandLink>
</h:form>

以及来自 register.xhtml 的注册表单:

<h:form>
<h:outputText value="Inregistrare client nou"/>
<br/>
Username: <h:inputText value="#{registerBean.username}">
<f:validator validatorId="registerUsernameValidator"></f:validator>
</h:inputText>
<br/>
Parola: <h:inputSecret value="#{registerBean.password}"></h:inputSecret>
<br/>
Re-Parola: <h:inputSecret value="#{registerBean.repassword}"></h:inputSecret>
<br/>
<br/>

Prenume: <h:inputText value="#{registerBean.firstname}"></h:inputText>
<br/>
Nume: <h:inputText value="#{registerBean.lastname}"></h:inputText>
<br/>
E-mail: <h:inputText value="#{registerBean.email}"></h:inputText>
<br/>
Adresa: <h:inputText value="#{registerBean.address}"></h:inputText>
<br/>
Oras: <h:inputText value="#{registerBean.city}"></h:inputText>
<br/>
Judet: <h:inputText value="#{registerBean.county}"></h:inputText>
<br/>
Cod postal: <h:inputText value="#{registerBean.postcode}"></h:inputText>
<br/>
Tara: <h:inputText value="#{registerBean.country}"></h:inputText>
<br/>
Telefon: <h:inputText value="#{registerBean.phone}"></h:inputText>
<br/>
<br/>
<h:commandButton value="Inregistreaza-ma"


action="#{registerBean.register}"></h:commandButton>

我们的自定义 RegisterUsernameValidator:

public class RegisterUsernameValidator implements Validator
{
UserManager um = UserManager.getInstance();

@Override
public void validate(FacesContext context, UIComponent arg1, Object value) throws ValidatorException
{
String username = (String) value;
if (!um.isUsernameAvailable(username))
{
FacesMessage facesMessage = new FacesMessage("Username indisponibil");
FacesContext.getCurrentInstance().addMessage("Username indisponibil", facesMessage);
}
}
}

以及来自 faces-config.xml 的验证部分:

<validator>
<validator-id>registerUsernameValidator</validator-id>
<validator-class>validation.RegisterUsernameValidator</validator-class>
</validator>

最佳答案

com.sun.faces.mgbean.ManagedBeanPreProcessingException: Unexpected error processing managed bean registerBean

这意味着在 RegisterBean 构造之后直接处理 bean 属性由于开发人员错误(错误的配置、不可访问的属性、无效的属性类型等)而惨遭失败。问题的根本原因应该作为异常堆栈跟踪中的根本原因部分可见。由于您没有共享整个堆栈跟踪,因此很难说出到底是什么失败了。

无论如何,只需阅读堆栈跟踪。答案就在里面。


更新:根据完整的堆栈跟踪:

Caused by: com.sun.faces.mgbean.ManagedBeanPreProcessingException: Unexpected error processing managed property loginBean
Caused by: java.lang.NullPointerException

loginBean 的托管属性无法在 registerBean 中设置。验证 RegisterBean 类中是否有 setter 并且它具有正确的签名。

public void setLoginBean(LoginBean loginBean) {
this.loginBean = loginBean;
}

与具体问题无关,此 NullPointerException 确实应该是 PropertyNotWritableException。您使用的是什么 JSF 实现/版本?

关于java - 卡在 ManagedBean Pre ProcessingException : Unexpected error processing managed bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4977893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com