【问题标题】:Can't access managed bean method using JSF无法使用 JSF 访问托管 bean 方法
【发布时间】:2014-07-02 03:07:17
【问题描述】:

您好,我正在尝试访问和调用我的 JSF 页面中托管 bean 内的方法。以下是 JSF 页面的相关部分:

<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
            xmlns:h="http://xmlns.jcp.org/jsf/html"
            xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
            xmlns:c="http://java.sun.com/jsp/jstl/core"
            xmlns="http://www.w3.org/1999/xhtml"
            template="./template.xhtml">

<ui:define name="right">
    <c:forEach items="#{tweetManager.getTweets}" var="item">
        <h:link value="#{item.username}" />&nbsp;
        Likes: &nbsp;&nbsp;<h:outputText value="#{item.likes}" />&nbsp;&nbsp;&nbsp;
        <h:link id="" value="like" />&nbsp;<br />
        <textarea>
            <h:outputText value="#{item.text}" />
        </textarea>
    </c:forEach>
</ui:define>

这是托管 bean。

@ManagedBean
@RequestScoped
public class TweetManager {
private Tweet TweetEntity;
private List<Tweet> Tweets;

@EJB
private TweetService TweetService;

@PostConstruct
public void init(){
    TweetEntity = new Tweet();
}

public void setTweet(Tweet tweetEntity){
    this.TweetEntity = tweetEntity;
}

public Tweet getTweet(){
    return this.TweetEntity;
}

public void Save(){
    TweetService.create(TweetEntity);
}

public List<Tweet> getTweets(){
    Query query = TweetService.getEntityManager().createNativeQuery("SELECT * FROM tweet");
    Tweets = query.getResultList();
    return Tweets;
   }
}

我收到一条错误消息:... .TweetManager' 没有属性 'getTweets'。

【问题讨论】:

  • 您使用的是哪个版本的 ExpressionLanguage?试试:
  • 您的代码显示两个getTweets()(我认为这是编辑问题的问题)。无论如何,由于您不使用泛型,一旦此问题得到解决,您将收到item.username 的错误(因为据编译器所知,item 是Object)。使getTweets() 返回List&lt;Tweet&gt; 而不是List。
  • 应该在发布之前再次修改我的代码。是的,它与 getWeets() 一起工作我已经添加了我导入的所有 xmlns 版本。

标签: java jsf jsf-2 ejb


【解决方案1】:

getTweet() 不是属性,它是属性的访问器(或“getter”)。

属性的名称是tweets(没有get,第一个字母小写)。所以:

<c:forEach items="#{tweetManager.tweets}" var="item">

请记住,boolean 属性具有“getter”,例如“is”(v.g. isRich())

请记住我对使用泛型的评论。

【讨论】:

  • 值得注意的是:布尔类型的 getter 仍应为 getRich(),而不是 isRich()。
  • Gimby 是对的(区别在于Boolean 是一个对象,而不是一个原始对象)。我还修改了文档,似乎getRich 也适用于boolean 属性(更多信息:stackoverflow.com/questions/799280/…)
  • 确实如此。然后创建以下有趣的场景:有一个类层次结构,在一层中有一个 getXXX(),在另一层有一个 isXXX()。 JSF 会选择哪一个?根据我的经验,总是错的:)
猜你喜欢
  • 2014-07-06
  • 2014-12-11
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多