2013-05-28 27 views
1

今天晚上我第一次開始使用JSF 2.0,並且我設法拼湊了一個託管bean,它返回一個電影列表和一個xhtml頁面它能夠顯示從託管bean返回的電影表格。JSF2.0來自bean的參數和屬性的初學問題

繼續之後,我試圖在數據表中添加一個鏈接,以創建一個單獨的xhtml頁面,該頁面只顯示單個電影的詳細信息。但我似乎無法在新的xhtml頁面中使用電影bean。

下面是主要的上市XHTML頁面代碼:

<h:head> 
    <title>Facelet Title</title> 
</h:head> 
<h:body> 
    <h:form> 
     <h:dataTable value="#{filmResourceBean.allFilms}" var="film"> 
      <h:column><f:facet name="header">Title</f:facet> 
       <h:commandLink value="#{film.title}" action="film.xhtml" /> 
       <f:param name="id" value="#{film.imdbId}" /> 
      </h:column> 
      <h:column><f:facet name="header">Plot</f:facet>#{film.plot}</h:column> 
     </h:dataTable> 
    </h:form> 
</h:body> 

這裏是從託管bean的代碼實現此頁:

@ManagedBean(name="filmResourceBean") 
@SessionScoped 
public class FilmResource implements Serializable { 

    public List<Film> getAllFilms() { 
    // This just returns a basic list of films, its not needed here to save space... 
    } 

    public Film getFilm(String id) { 
    // THis just returns a film object that matches the given id, again to save space its not needed 
    } 
} 

現在我嘗試重新創建的想法是當用戶按下主列表x中找到的表中的鏈接時html頁面,它們被重定向到一個新的xhtml頁面,該頁面應該通過託管bean中的getFilm(String id)方法獲得應該顯示的Film。

這裏簡直就是我有什麼的那一刻,只打印出的電影對象的基本的toString(),例如:[email protected]

<?xml version='1.0' encoding='UTF-8' ?> 
<!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"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head > 
    <h:body > 
     <h:outputText value="#{filmResourceBean.getFilm(id)}"></h:outputText> 
    </h:body> 
</html> 

我想要什麼簡單地在這裏展示的是電影的標題,並且我嘗試了#{filmResourceBean.getFilm(id).title}#{filmResourceBean.getFilm(id)}.title等不同的組合,但是他們都沒有工作,並且對JSF來說是新手,我不確定去哪裏看或什麼正在尋找。我在網上找到的教程沒有告訴我這樣做的方法,或者至少不是我已經發現的。有人能指引我走向正確的方向嗎?

+0

感謝kocko,我應該在做。 –

回答

2

你幾乎正確的地方,你需要使用#{filmResourceBean.getFilm(id).title}但你的問題是與參數id。當使用f:param打開視圖時,它將傳遞參數作爲GET參數。要在目標視圖中使用它,你需要使用param['key']所以你的情況最終代碼應該是:

#{filmResourceBean.getFilm(param['id']).title}