2012-08-02 12 views
5

JSFでデータテーブルを設定しようとしていますが、そのテーブルの行合計は、その行のすべてのボックスのonChangeの合計を合計します。行は次のようになります。onChangeのJSFアクション

<tr id="input_row_1"> 
<td id="mondayInput1"> 
    <h:inputText id="monday1" size="4" value="#{timesheet.monday1}" required="false" /> 
    <!-- <input name="monday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="tuesdayInput1"> 
    <h:inputText id="tuesday1" size="4" value="#{timesheet.tuesday1}" required="false" /> 
    <!--<input name="tuesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="wednesdayInput1"> 
    <h:inputText id="wednesday1" size="4" value="#{timesheet.wednesday1}" required="false" /> 
    <!--<input name="wednesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="thursdayInput1"> 
    <h:inputText id="thursday1" size="4" value="#{timesheet.thursday1}" required="false" /> 
    <!--<input name="thursday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="fridayInput1"> 
    <h:inputText id="friday1" size="4" value="#{timesheet.friday1}" required="false" /> 
    <!--<input name="friday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="saturdayInput1"> 
    <h:inputText id="saturday1" size="4" value="#{timesheet.saturday1}" required="false" /> 
    <!--<input name="saturday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td id="sundayInput1"> 
    <h:inputText id="sunday1" size="4" value="#{timesheet.sunday1}" required="false" /> 
    <!--<input name="sunday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> 
</td> 
<td> 
    <h:inputText id="total1" size="4" value="#{timesheet.total1}" required="false" /> 
    <!-- <input name="total1" id="total1" type="text" size="5" readonly="readonly" /> --> 
</td> 

ので、私は最初の日のエントリにonChange="#{timesheet.setTotal1}"を追加しようとしましたが、onChangeイベントはjavascriptの、ではないのJava/JSFコードを呼び出します。誰かが合計を更新する手助けができますか?

はEDIT: 私はBalusCの答えを受け入れたが、必要に応じても、それは確かにそう

<h:inputText id="friday1" size="4" value="#{timesheet.friday1}" maxlength="4" required="false" > 
    <f:ajax event="change" render="total1" listener="#{timesheet.updateTotal1}" /> 
</h:inputText> 

答えて

6

のように、仕事を得るために<f:ajax>タグにevent属性を含めるようにしている、onchange属性は単なるとして扱われますJavaScriptのonchangeハンドラ関数を表すテキストHTML属性。これは、 "プレーンバニラ" HTMLと違いはありません。その属性のEL式はすべて値式として扱われます。 tag documentationも参照してください。

あなたの質問履歴に基づいて、JSF 2.xを使用しています(JSF 2.xではJSF 1.xと比べて多くのことが異なって行われているため、 。したがって、新しいJSF 2.0 <f:ajax>タグを使用するだけで済みます。

public void changeTotal1(AjaxBehaviorEvent event) { 
    total1 = ...; 
} 
+0

<h:inputText ...> <f:ajax listener="#{timesheet.changeTotal1}" render="idOfTotalComponent" /> </h:inputText> ... <h:outputText id="idOfTotalComponent" value="#{timesheet.total1}" /> 

私はこれをしなかった、と今取得しています: "javax.servlet.ServletException:プロパティ 'updateTotal1' タイプcom.timesheet.Timesheetに見つからない" updateTotal1が財産であるかのようにメソッド/アクションではなく –

+0

''ではどういう意味ですか?どうやら、 'f:' taglibのXML名前空間はまったく宣言されていません。 ''タグ全体は実際には "プレーンテキスト"として扱われます(読み込み:ELはすべて値式として扱われます)。 – BalusC

+0

しかし、それは宣言されている、私はちょうどすべてのHTMLコード –

関連する問題