繁体   English   中英

无法获得

[英]Unable to get <h:outputText value from Java class

我在获取tUser的名称并将其打印在屏幕上时遇到问题。 可能是我没有调用正确获取名称的方法(),因为当我调用函数listAgencies时,它将在Eclipse控制台中正确打印它们。 感谢您的任何建议!

在.xthml文件中,我有:

<h:panelGrid id="panel2" columns="2" cellpadding="5">
            <c:forEach items="${agencyBean.listAgencies()}" var="inputBoxes">
                <h:outputText value="${inputBoxes.gettUser().name}" />
                <h:inputText />
            </c:forEach>
        </h:panelGrid>

我的豆类:

@ManagedBean(name = "agencyBean")
@SessionScoped
public class AgencyBean {

    private TAgency tEventType = new TAgency();

    public void listAgencies() {
        EntityManager em = HibernateUtil.getEntityManager();
        // read the existing entries and write to console
        Query q = em.createQuery("select u from TAgency u");
        List<TAgency> agencyList = q.getResultList();
        for (TAgency agency : agencyList) {
            System.out.println("NAme: " + agency.gettUser().getName());

        }
    }

    public TAgency gettEventType() {
        return tEventType;
    }

    public void settEventType(TAgency tEventType) {
        this.tEventType = tEventType;
    }
}

TUser是我要从中获取名称的另一个实体。 我有公共的getName()方法。

问题在这里:

<c:forEach items="${agencyBean.listAgencies()}" ... >

它应该为listAgencies属性寻找一个getter方法,但是它是一个将要执行的void方法,没有访问权限。

最好的选择是:

  • 在您的类中创建一个名为List<TAgency> listAgencies
  • listAgencies属性定义正确的getter和setter方法。 永远不要在托管bean的getter中定义业务逻辑。 相关: 为什么JSF多次调用getters
  • 可能将bean的范围更改为@RequestScope以在每次用户访问该视图时加载此列表。 相关: 如何选择正确的bean作用域?
  • 使用@PostConstruct方法加载列表。

根据这些建议,代码如下所示:

@ManagedBean(name = "agencyBean")
@RequestScoped
public class AgencyBean {

    private TAgency tEventType = new TAgency();
    private List<TAgency> listAgencies;

    @PostConstruct
    public void init() {
        EntityManager em = HibernateUtil.getEntityManager();
        // read the existing entries and write to console
        Query q = em.createQuery("select u from TAgency u");
        List<TAgency> agencyList = q.getResultList();
        for (TAgency agency : agencyList) {
            System.out.println("NAme: " + agency.gettUser().getName());
        }
    }

    public TAgency gettEventType() {
        return tEventType;
    }

    public void settEventType(TAgency tEventType) {
        this.tEventType = tEventType;
    }

    public List<TAgency> getListAgencies() {
        return listAgencies;
    }

    public void setListAgencies(List<TAgency> listAgencies) {
        this.listAgencies = listAgencies;
    }
}

和您的JSF代码:

<!-- Note: no parenthesis usage -->
<c:forEach items="#{agencyBean.listAgencies}" var="inputBoxes">
    <!-- no need to call the getter verbosely, Expression Language call it for you automatically -->
    <h:outputText value="#{inputBoxes.user.name}" />
    <!-- what you want to do here? -->
    <h:inputText />
</c:forEach>

另外,可能您不想使用<c:forEach>而是使用<ui:repeat> 相关: JSF2 Facelets中的JSTL ...有意义吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM