2013-03-13 24 views
6

Tôi đang sử dụng JSF và tôi có văn bản đầu ra cho mỗi ví dụ "qwerty" mà tôi muốn hiển thị/định dạng khác nhau nếu một số điều kiện sẽ được đáp ứng. Vì vậy, mỗi ví dụ nếu:JSF outputtext hiển thị có điều kiện/kiểu dáng. Khác tùy theo điều kiện

  • cond1 là đúng thì tôi muốn hiển thị qwerty
  • cond1 là sai sau đó tôi muốn hiển thị qwerty

và vân vân.

Có cách nào không?

Trả lời

12

Bạn có thể sử dụng một ternary operator để chọn phong cách bạn muốn áp dụng tùy thuộc vào điều kiện:

<h:outputText value="qwerty" 
    style="#{backingBean.cond1 ? 'text-decoration:line-through;':'fontstyle:italic;'}"> 

Và nó sẽ là tốt hơn nếu bạn sử dụng các lớp học css theo thứ tự kiểu inline. Chúc may mắn!

Sử dụng 'điều kiện' nội tuyến trong EL cũng có thể, xem using greater than logical expression in rendered attribute. Đọc cũng là discussion about using inline in the xhtml or in the javabean

+0

Tôi nghĩ về điều đó nhưng tôi nghĩ đó là một cách thanh lịch hơn. Cảm ơn bạn vì câu trả lời! – CyberGriZzly

+0

Đó không phải là cách thanh lịch nhất. Bạn thực sự tạo ra hai thành phần trong cây thành phần. Đồng thời giữ [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)! –

+0

Nó chỉ là một cách để đưa ra một lời giải thích cơ bản về cách đánh giá kết xuất có điều kiện hoạt động trong JSF. Cách tiếp cận thứ hai của tôi là tốt hơn ;-) –

6

cách gọn gàng là tạo ra các lớp CSS

<h:outputText value="qwerty" 
    styleClass="#{backingBean.cond1 ? 'classA' : 'classB'}" /> 
+0

Cảm ơn! Cái đó nhìn đẹp đó! – CyberGriZzly

7

Trong những tình huống tương tự, tôi sử dụng sau

<h:outputText value="yourValueFromYourBeanOrWhatever" styleClass="anArbitraryName#{managedBean.condition}"/> 

Và trong file CSS của tôi, tôi xác định các lớp:

.anArbitraryNametrue{} 

.anArbitraryNamefalse{} 
0

Với điều kiện. Trước khi thẩm vấn bạn đặt điều kiện. Nếu đúng, nó trả về giá trị trước t ":". Nếu nó là sai, nó trả về những gì đằng sau ":".

<h:outputText value="#{condition ? 'true' : 'false'}" /> 
Các vấn đề liên quan