簡體   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