2012-01-05 31 views
5

Tôi muốn thay đổi màu nền của các hàng dựa trên điều kiện.Tô màu các hàng có thể điều chỉnh dựa trên điều kiện trong JSF 2

<t:dataTable id="data" 
       styleClass="history-table" 
       headerClass="history-table-header" 
       rowClasses="history-table-row-default" 
       border="2" cellpadding="5" cellspacing="2" 
       var="entry" 
       value="#{historyBean.logEntryList}" 
       preserveDataModel="false" 
       rows="#{historyBean.history.rowCount}" 
       sortable="true"> 

      <h:column> 
       <f:facet name="header"> 
       <h:outputText value="Debug Status" /> 
       </f:facet> 
       <h:outputText value="#{entry.action}" /> 
      </h:column> 

Nếu giá trị của "entry.action" được XI thích sử dụng "lịch sử-table-hàng-không đầy đủ" (tên của styleClass), nếu giá trị là YI muốn sử dụng "lịch sử -table-row-error "(tên của styleclass). Tất cả các trường hợp khác nên sử dụng giá trị mặc định.

Tôi đoán tôi phải lấy đối tượng hiện tại của mục nhập bằng cách nào đó để đậu của tôi, phân tích nó và trả về một chuỗi với tên của lớp con để outputText để thay đổi màu sắc. Nhưng tôi không biết làm thế nào ... (Tôi mới trong JSF ...)

Ai đó có thể giúp tôi không?

Trả lời

11

Sử dụng thuộc tính rowStyleClass của <t:dataTable> thay vì rowClasses. Các rowStyleClass được đánh giá trên một cơ sở mỗi hàng nơi có sẵn var="entry", trong khi rowClasses chỉ được đánh giá trên cơ sở mỗi bảng.

<t:dataTable ... rowStyleClass="#{entry.action == 'X' ? 'history-table-row-incomplete' : (entry.action == 'Y' ? 'history-table-row-error' : 'history-table-row-default')}"> 
+1

này gây ra một lỗi phân tích cú pháp. Có thể nói tôi sử dụng myfaces 2.1.5. Có cách nào để có được giá trị của extry.action vào đậu của tôi để xử lý nó ở đó? –

+0

Vui lòng đề cập đến thông báo lỗi phân tích chính xác. – BalusC

+0

rowStyleClass = "# {entry.action == 'F'? 'Lịch sử-bảng-hàng-lỗi': (entry.action == 'Y'? 'History-table-row-error': ''): ' '} "Phân tích cú pháp lỗi: # {entry.action ==' F '? 'history-table-row-error': (entry.action == 'Y'? 'history-table-row-error': ''): ''} Gây ra bởi: org.apache.el.parser .ParseException - Đã gặp "": "": "" ở dòng 1, cột 108. Đã mong đợi một trong: "}" ... "." ... "[" ... ">" ... "gt" ... "<" ... "lt" ... "> =" ... "ge" ... "<=" ... "le" ... "==" ... "eq" ... "! =" ... "ne" ... "&&" ... "và" ... "|| " ... "hoặc" ... "*" ... "+" ... "-" ... "/" ... "div" ... "%" ... "mod" –

-1

Bạn có thể sử dụng JSF EL hành ternary, như sau:

rowStyleClass="#{entry.action eq X ? 'history-table-row-incomplete' : (entry.action eq Y ? 'history-table-row-error' : 'default')}" 
+1

'styleClass' được áp dụng trên'

', không phải trên' '. – BalusC

+0

Ai đó đã phủ nhận bài đăng của tôi! Tôi có thể đã không sử dụng chính xác 'thuộc tính', nhưng quan điểm của tôi là làm cho OP hiểu cách thực hiện nó với EL và toán tử bậc ba. – bchetty

+2

Huh? OP đã hỏi * "Tôi muốn thay đổi màu nền của các hàng dựa trên điều kiện." *. Câu trả lời này không trả lời. Vì vậy, câu trả lời này là sai. Đơn giản như thế. Chỉ cần sửa chữa hoặc xóa nó nếu bạn đang bận tâm. Tôi không thể cho cuộc sống hiểu tại sao câu trả lời sai nên được upvoted. Nó sẽ phá hủy hoàn toàn điểm Stack Overflow. – BalusC

Các vấn đề liên quan