2012-02-24 38 views
1

我正在顯示一個來自sql查詢的數據表,並希望根據來自此sql查詢的某個字段值呈現一段代碼。如何將參數傳遞給呈現的h:outputText方法?

查看:records.xthml

<table> 
    <thead> 
    <tr> 
     <td>#{messages['table.header.id']}</td> 
     <td>#{messages['table.header.name']}</td> 
     <td>#{messages['table.header.date.added']}</td> 
     <td>&nbsp;</td> 
    </tr> 
    </thead> 
    <tbody> 
    <a4j:repeat value="recordListBean.records" var="listedRecord" rowKeyVar="index"> 
     <tr> 
     <td><h:outputText value="#{listedRecord.id}</td> 
     <td><h:outputText value="#{listedRecord.name}</td> 
     <td> 
      <h:outputText value="#{listedRecord.dateAdded}" rendered="#{viewRecordBean.currentRecord(listedRecord.id)}" /> 
      <h:outputText value="#{messages['table.header.record.archived']}" rendered="!#{viewRecordBean.currentRecord(listedRecord.id)}" /> 
     </td> 
     </tr> 
    </a4j:repeat> 
    </tbody> 
</table> 

控制器:ViewListBean.java

public boolean currentRecord(Long recordId) { 
    Long maxRecordId = 10; 
    if (recordId <= maxRecordId) { 
    return true; 
    } else { 
    return false; 
    } 
} 

的問題records.xhtml代碼的兩行分別是:

<h:outputText value="#{listedRecord.candidate}" rendered="#{viewRecordBean.currentRecord(listedRecord.id)}" /> 
<h:outputText value="#{messages['table.header.record.archived']}" rendered="#{!viewRecordBean.currentRecord(listedRecord.id)}" /> 

我想能夠在渲染檢查中傳遞一個參數並返回一個布爾值來呈現與否。假設在這個sql查詢中返回了20條記錄。如果當前行的recordId值小於或等於10,則它將返回true,並且將顯示listedRecord.dateAdded字段。否則,它將返回錯誤,並顯示Archived這個詞。

這是將參數從JSF生成的XHTML頁面傳遞到控制bean方法的正確方法嗎?

有沒有更好或更有效的方法來做到這一點?

+0

如果我是你,我會這樣做:'value =「#{viewRecordBean.currentRecord(listedRecord.id)?listedRecord.candidate:messages ['table.header.record.archived']}」'。而不是兩行你只有一個,你只檢查一次的條件。 – 2017-04-12 07:45:09

回答

1

你只有一個錯誤:!必須進入EL表達式。

I.e.這是無效的:

rendered="!#{viewRecordBean.currentRecord(listedRecord.id)}" 

它應該是:

rendered="#{!viewRecordBean.currentRecord(listedRecord.id)}" 

對於剩餘它看起來像它應該工作得很好,假設你的環境支持EL 2.2。我只使用<h:dataTable>,因爲這樣可以消除HTML樣板。

+0

感謝您的快速回復!!我是JSF/Java/EL等的新手。我如何知道我的堆棧支持哪些EL? – DrewShirts 2012-02-24 18:54:11

+0

取決於服務器和web.xml版本。另見http://stackoverflow.com/questions/5273729/how-to-call-a-method-with-a-parameter-in-jsf – BalusC 2012-02-24 18:56:58

+0

看來我使用的是jboss-el-2.0.1。與Mojarra。 – DrewShirts 2012-02-24 20:26:57