2015-10-03 297 views
0

我正在開發一個系統,用戶選擇一些複選框,每個複選框都有一個貨幣值,我想根據選中的複選框更改outputText。如何更改outputText的值?

例如:我有三個複選框,每個都有$ 10.00。如果用戶只選擇兩個複選框,則outputText必須顯示$ 20.00。如果用戶選擇最後一個,outputText必須顯示$ 30.00。而這一切都沒有重新加載頁面。

我迄今爲止代碼:

<h:form id="form"> 
    <p:fieldset legend="Tipo base do site:" style="margin-bottom:20px"> 
     <h:panelGrid columns="2" cellpadding="5"> 
      <p:dataList value="#{tiposIndexView.tipos}" var="tipo" 
      type="ordered" > 
       R$ 
       <h:outputText value="#{tipo.preco}" > 
        <f:convertNumber pattern="#0.00" /> 
       </h:outputText> 
      </p:dataList> 
      <p:selectOneRadio id="tipo" value="#{tiposIndexView.tipos}" 
        layout="grid" columns="1"> 
        <f:selectItems value="#{tiposIndexView.tipos}" var="tipo" 
         itemLabel="#{tipo.nome}" itemValue="#{tipo.nome}" /> 
      </p:selectOneRadio> 
     </h:panelGrid> 
    </p:fieldset> 

    <p:fieldset legend="Sistemas adicionais:" style="margin-bottom:20px"> 
     <h:panelGrid columns="2" cellpadding="5"> 
      <p:dataList value="#{sistemasIndexView.sistemas}" var="sistema" 
      type="ordered" > 
       R$ 
       <h:outputText value="#{sistema.preco}" > 
        <f:convertNumber pattern="#0.00" /> 
       </h:outputText> 
      </p:dataList> 
      <p:selectManyCheckbox style="margin-top:0px;!important" id="grid" value="#{sistemasIndexView.sistemas}" layout="grid" columns="1"> 
       <f:selectItems value="#{sistemasIndexView.sistemas}" var="sistema" itemLabel="#{sistema.nome}" itemValue="#{sistema}" /> 
      </p:selectManyCheckbox> 
     </h:panelGrid> 
    </p:fieldset> 

    <p:fieldset legend="Valor total:"> 
     <h:outputText> 
      R$ 
      <f:convertNumber pattern="#0.00" /> 
     </h:outputText> 
    </p:fieldset> 
</h:form> 

最後的outputText是我想要顯示的總價值。

還有一個問題,每次打開我的網站時,所有複選框都會開始檢查,我希望所有複選框都未選中。複選框的代碼:

@ManagedBean 
@ViewScoped 
public class SistemasIndexView implements Serializable{ 
    private static final long serialVersionUID = -2697991732915561009L; 
    private List<Sistema> sistemas; 

    @PostConstruct 
    public void init(){ 
     sistemas = new ArrayList<>(); 
     sistemas.add(new Sistema("Teste", 200)); 
     sistemas.add(new Sistema("Exemplo", 300)); 
     sistemas.add(new Sistema("gsdfaf", 50)); 
    } 

    public List<Sistema> getSistemas() { 
     return sistemas; 
    } 

    public void setSistemas(List<Sistema> sistemas) { 
     this.sistemas = sistemas; 
    } 
} 
+0

如果您使用jquery,這是簡單的實現。你可以使用它嗎? – NightsWatch

+0

我可以選擇這個系統的語言,但我現在真的很想學習JSF。 :) –

+0

複選框的默認值取決於您的支持bean中的true/false,您沒有提供代碼,因此我們只能猜測您的默認值爲「true」。你想把總數存儲在後臺bean中嗎? – Geinmachi

回答

1

您需要2個列表,一個用於存儲所有複選框,另一個用於選定的複選框。這就是爲什麼您選中所有複選框,因爲您選擇的值與所有可能的相同。

的CSS錯誤:style="margin-top:0px;!important"應該style="margin-top:0px !important;"

事情你在支撐bean需要(與getter/setter方法):

  • 名單選定項目
  • 場的計算和private int sum
  • 計算輸出的方法public void calculateSum()

代碼

<p:selectManyCheckbox style="margin-top:0px !important;" id="grid" value="#{sistemasIndexView.selectedSistemas}" layout="grid" columns="1"> 
     <f:selectItems value="#{sistemasIndexView.sistemas}" var="sistema" itemLabel="#{sistema.nome}" itemValue="#{sistema}" /> 
     <p:ajax process="@this" listener="#{test.calculateSum}" update="sum"/> 
</p:selectManyCheckbox> 

<h:outputText id="sum" value="#{test.sum}"> 
     <f:convertNumber pattern="#0.00" /> 
</h:outputText> 

,計算方法,你可以改變它,但是從你所寫的內容它的工作

public void calculateSum() { 
    sum = selectedSistemas.size() * 10; 
}