【问题标题】:Modify the value of p:menuitem - primefaces修改 p:menuitem - primefaces 的值
【发布时间】:2015-07-18 05:32:55
【问题描述】:

我认为这是一个小问题。我想修改p:menuButton的属性值,我想从我的用户bean中取值(在我的应用程序中他的铭文之后),比如取用户的名字(getName)。

我确实喜欢:

<p:menuButton value="#{user.getName}">
            <p:menuitem value="My profile" action="#{toolbarView.edit}" update="" icon="ui-icon-disk" />
            <p:menuitem value="log out" actionListener="#{toolbarView.close}" update="" icon="ui-icon-arrowrefresh-1-w" />
</p:menuButton>

但我在界面图形中遇到了这个问题(当我进入本地主机时):

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /profile.xhtml @55,53 value="#{user.getName}": Property 'getName' not found on type com.live.beans.User
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
root cause

javax.el.PropertyNotFoundException: /profile.xhtml @55,53 value="#{user.getName}": Property 'getName' not found on type com.live.beans.User
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    org.primefaces.component.menubutton.MenuButton.getValue(MenuButton.java:96)
    org.primefaces.component.menubutton.MenuButtonRenderer.encodeButton(MenuButtonRenderer.java:64)
    org.primefaces.component.menubutton.MenuButtonRenderer.encodeMarkup(MenuButtonRenderer.java:53)
    org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:113)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:88)
    org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:71)
    org.primefaces.component.column.renderer.PanelGridBodyColumnRenderer.encode(PanelGridBodyColumnRenderer.java:41)
    org.primefaces.component.column.ColumnRenderer.encodeEnd(ColumnRenderer.java:50)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:88)
    org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:71)
    org.primefaces.component.row.renderer.PanelGridBodyRowRenderer.encode(PanelGridBodyRowRenderer.java:33)
    org.primefaces.component.row.RowRenderer.encodeEnd(RowRenderer.java:50)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
    org.primefaces.component.panelgrid.PanelGridRenderer.encodeStaticBody(PanelGridRenderer.java:155)
    org.primefaces.component.panelgrid.PanelGridRenderer.encodeTableBody(PanelGridRenderer.java:104)
    org.primefaces.component.panelgrid.PanelGridRenderer.encodeTableLayout(PanelGridRenderer.java:65)
    org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:37)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)

我的 bean 用户喜欢:

@ManagedBean(name="user")
public class User {

    private int id;
    private String name;
    @Column(unique=true)
    private String email;
    private String password;
    private String confirmationPass;



    public User() {
        super();
    }

public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


    public String getConfirmationPass() {
        return confirmationPass;
    }

    public void setConfirmationPass(String confirmationPass) {
        this.confirmationPass = confirmationPass;
    }


    public User(int id, String name, String email, String password,
            String confirmationPass) {
        super();
        this.id = id;
        this.name = name;
        this.email = email;
        this.password = password;
        this.confirmationPass = confirmationPass;
    }

    public User(int id, String name, String email, String password) {
        super();
        this.id = id;
        this.name = name;
        this.email = email;
        this.password = password;
    }

    public User(String name, String email, String password) {
        super();
        this.name = name;
        this.email = email;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", Name=" + name + ", email=" + email
                + ", password=" + password + "]";
    }


}

此外,当我使用 user.name 而不是 user.getName 时,我的界面图形上没有任何内容,就像我使用 value=" " 一样,它在我的界面图形中什么也没有显示。

<p:menuButton value="#{user.name}">
            <p:menuitem value="My profile" action="#{toolbarView.edit}" update="" icon="ui-icon-disk" />
            <p:menuitem value="log out" actionListener="#{toolbarView.close}" update="" icon="ui-icon-arrowrefresh-1-w" />
</p:menuButton>

感谢任何可以帮助我的人

【问题讨论】:

  • #{user.getName} 是错误的,#{user.name} 是正确的,正如您在互联网上看到的那样。如果为空,请搜索其原因(bean scoping?)
  • @Kukeltje 你所说的 bean 作用域是什么意思?

标签: jsf-2 primefaces menu


【解决方案1】:

好的,将你的properti(value="#{user.getName}">) 名称从getName 更改为name,然后用它的getter 和settes 在"user" back bean property"name" 中进行assingh。

【讨论】:

  • 我添加了 getter 和 setter,正如您在我的 bean 用户中看到的那样,但是当我执行 user.name 时,它​​会为空,为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多