p:commandButton 操作抛出 javax.el.PropertyNotFoundException

问题描述 投票:0回答:1

错误在于:

javax.el.PropertyNotFoundException:/index.xhtml:在类型 fya.beanpages.IndexBean 上找不到属性“validar”

看起来没有找到 validar 方法。它认为这是一个属性。

这是xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui">

<h:head>  
  <title>FYA WEB</title>
</h:head>  

<h:body>  
    <ui:composition template="/base/base.xhtml">
    <ui:param name="title" value="FYA Web Login"/>
        <ui:define name="content">
            <h:form id="form">  
                <p:panel id="panel" header="Inicio Sesión">  
                    <p:messages id="panelmsg"/>  

                    <h:panelGrid columns="3">  
                        <h:outputLabel for="nomUsuario" value="Usuario: *" />  
                        <p:inputText id="nomUsuario" value="#{login.usu.nomusuario}" required="true" label="Usuario"/>

                        <h:outputLabel for="pwdUsuario" value="Contraseña: *" />  
                        <p:password id="pwdUsuario" value="#{login.usu.contraseña}" label="Contraseña" required="true"/>  
                    </h:panelGrid>  

                    <p:commandButton id="btnIniciar" value="Iniciar Sesión" action="#{login.validar}" update="panelmsg" ajax="true"/>  
                </p:panel>  
            </h:form>
        </ui:define>
    </ui:composition>        
</h:body>

这是托管 Bean。

package pe.edu.cibertec.managed;
@ManagedBean(name="login")
public class LoginBean {

private Usuario usuario=new Usuario();
private static LoginService loginService= new LoginServiceImpl();

public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

public String validar() throws Exception {
    if(loginService.validar(usuario))
        return "paginas/principal";
    else{
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Datos Incorrectos"));
        return null;
    }
}


}

也许我认为我做错了什么,你能帮我吗?

jsf primefaces propertynotfoundexception methodexpression
1个回答
2
投票

当您没有正确安装 PrimeFaces 时,可能会发生这种情况。这样,所有

<p:xxx>
标记都被视为模板文本(这意味着,它们不会被 Facelets 解析为 JSF 组件,而是直接打印为 HTML 输出)。模板文本中的所有 EL 表达式默认解析为属性值表达式(如
<p>blah #{bean.foo} blah</p>
中所示),这需要 getter 方法。所有最初表示方法表达式的 EL 表达式都会抛出此异常,因为在 bean 中没有找到 getter。

要正确安装 PrimeFaces,请确保 JAR 文件位于 Web 应用程序的

/WEB-INF/lib
中。如果您使用 Maven 作为构建工具,则可以通过添加以下依赖项来实现:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version><!-- https://mvnrepository.com/artifact/org.primefaces/primefaces --></version>
    <classifier>jakarta</classifier> <!-- if you're already using Faces 3.0 or newer instead of JSF 2.x or older -->
</dependency>

您可以在Maven存储库列表中找到最新版本。如果您已经使用 Faces 3.0 或更高版本而不是 JSF 2.x 或更低版本,则应添加

jakarta
分类器标记。

如果您使用任何像 Eclipse 这样的 IDE,请确保您绝对不要触摸 Build Path 设置,如果您曾经不小心尝试解决它,请全部撤消!还要确保项目已正确重建,服务器的工作文件夹已正确清理,并且服务器中的部署确实在正确的位置包含 PrimeFaces JAR 文件。

另一件事需要考虑,taglib URI

http://primefaces.org/ui
是在 PrimeFaces 3.0 中引入的。因此,如果您碰巧拥有 PrimeFaces 2.x 或更早版本的 JAR,那么您也可能会面临这个问题。您需要将 PrimeFaces 至少升级到 3.0,或者回退到使用 2.x 兼容的 taglib URI
http://primefaces.prime.com.tr/ui

© www.soinside.com 2019 - 2024. All rights reserved.