2013-10-16 24 views
8

Primefaceにはさまざまな色のオプションを表示する必要があります。selectOneMenuのさまざまな色(Primefaces)

は、私は車が販売されている場合は、私はそうBLACKオプションREDの背景を表示する必要が動的アイテム(リスト)とのselectOneMenu

<p:selectOneMenu id="carMenu" style="margin-top:4px;" 
    value="#{Bean.selectedCar}" effect="fade" 
    autoupdate="true"> 
    <f:selectItems id="carsId" 
     value="#{myBean.allCars}" var="carItems" 
     itemLabel="#{carItems.name}" itemValue="#{carItems}" /> 
</p:selectOneMenu> 
private List<Cars> allCars; 

を持っています。私のモデルでは、車が売られているかどうかの値(ブール値売却済み)を返す属性があります。

私のselectOneMenuでどのように色を設定できますか?

+0

Thanx、私のコメントを削除してください。すべてをきれいに保つためにあなたを削除することができます – Kukeltje

答えて

9

解決策は、これをPrimeFaces 4.0以降で表示する「高度な」方法を使用することです。

あなたがテーブルで行うようにあなたは、列自身のための反復varで、(the showcaseを参照)p:selectOneMenuためp:columnタグでf:selectItemsタグを組み合わせることができます。

次に、条件によってはstyleClassを列全体に設定するのが理想的ですが、不幸にも機能しません。

@ManagedBean 
@ViewScoped 
public class Bean implements Serializable { 

    public class Car implements Serializable { 
     String name; 
     boolean sold; 

     public Car(String name, boolean sold) { 
      this.name = name; 
      this.sold = sold; 
     } 

     public String getName() { 
      return name; 
     } 

     public boolean isSold() { 
      return sold; 
     } 
    } 

    private List<Car> allCars = Arrays.asList(new Car("Audi", true), new Car(
      "Mercedes", false)); 

    public List<Car> getAllCars() { 
     return allCars; 
    } 

    private Car selectedCar; 

    public Car getSelectedCar() { 
     return selectedCar; 
    } 

    public void setSelectedCar(Car selectedCar) { 
     this.selectedCar = selectedCar; 
    } 

    public void send() { 
     System.out.println("Sent " + selectedCar.name); 
    } 

} 

あなたはまたあるかもしれない

XHTMLページ

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" style="height: 400px;"> 
<h:head> 
    <style type="text/css"> 
red-background { 
    //Empty, used just as a reference to set the style with jQuery 
} 
</style> 
</h:head> 
<h:body> 
    <h:form> 
     <p:commandButton action="#{bean.send}" value="Send" ajax="false" /> 
     <p:selectOneMenu id="carMenu" style="margin-top:4px;" 
      value="#{bean.selectedCar}" effect="fade" autoupdate="true" var="car" 
      converter="omnifaces.SelectItemsConverter" onchange="setSelectionColor();"> 
      <f:selectItems id="carsId" value="#{bean.allCars}" var="carItem" 
       itemLabel="#{carItem.name}" itemValue="#{carItem}" /> 
      <p:column> 
       <h:outputText value="#{car.name}" 
        styleClass="#{car.sold ? 'red-background' : ''}" /> 
      </p:column> 
     </p:selectOneMenu> 
    </h:form> 
    <script> 
     $(document).ready(function() { 
      //Set red background for the options (not for td, but for its parent tr) 
      $(".red-background").parent().css("background-color", "red"); 
      setSelectionColor(); 
     }); 
     function setSelectionColor(){ 
      //Check if the selected value has a red background 
      //(active and red-background styles altogether), 
      //if true, set the selectonemenu label to red too 
      if($(".ui-state-active .red-background").size() > 0){ 
       $(".ui-selectonemenu-label").css("background-color", "red"); 
      }else{ 
       $(".ui-selectonemenu-label").css("background-color", "white"); 
      } 
     } 
    </script> 
</h:body> 
</html> 

Bean.java:幸いにも、あなたがあなたの目標を達成することができ、いくつかのJavascript/jQueryのコードを追加し、このSSCCEをチェックアウト背景色ではなく、フォントの色のみを設定することに興味があります。

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head> 
    <style type="text/css"> 
.red-font { 
    color: red; 
} 
</style> 
</h:head> 
<h:body> 
    <h:form> 
     <p:commandButton action="#{bean.send}" value="Send" ajax="false" /> 
     <p:selectOneMenu id="carMenu" style="margin-top:4px;" 
      value="#{bean.selectedCar}" effect="fade" autoupdate="true" 
      var="car" 
      converter="omnifaces.SelectItemsConverter"> 
      <f:selectItems id="carsId" value="#{bean.allCars}" var="carItems" 
       itemLabel="#{carItems.name}" itemValue="#{carItems}" /> 
      <p:column> 
       <h:outputText styleClass="#{car.sold ? 'red-font' : ''}" 
        value="#{car.name}" /> 
      </p:column> 
     </p:selectOneMenu> 
    </h:form> 
</h:body> 
</html>