2012-08-02 57 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代碼。有人可以幫助獲得總數更新嗎?

編輯: 我已接受BalusC的答案,但需要還包括event屬性爲<f:ajax>標籤來得到它的工作,像這樣

<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

事實上,onchange屬性只是當作一個普通的文本HTML屬性應該代表一個JavaScript處理函數。這與「普通香草」HTML沒有區別。該屬性中的任何EL表達式都將被視爲值表達式。另請參閱tag documentation

根據您的問題歷史記錄,您使用的是JSF 2.x(在JSF 2.x中,與JSF 1.x相比,在未來的問題中明確提及確切的JSF impl/version) 。所以,只需使用新的JSF 2.0 <f:ajax>標籤即可。

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

... 

<h:outputText id="idOfTotalComponent" value="#{timesheet.total1}" /> 

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

我這樣做,和我現在越來越: 「javax.servlet.ServletException:房產 'updateTotal1' 在類型com.timesheet.Timesheet未找到」 彷彿updateTotal1是一個屬性而不是方法/動作 – 2012-08-02 19:03:24

+0

在'上,你的意思是?顯然,f:'taglib的XML名字空間根本沒有被聲明。然後整個''標籤將被視爲「純文本」(讀取:任何EL然後被視爲值表達式)。 – BalusC 2012-08-02 21:41:21

+0

但它已被聲明,我只是沒有包括所有的html代碼 – 2012-08-03 13:26:08