【问题标题】:JSF action from onChange来自 onChange 的 JSF 操作
【发布时间】:2012-08-02 17:50:34
【问题描述】:

我正在尝试使用 JSF 设置一个数据表,其中包含行总数框,该框将汇总行中任何框的行总数 onChange。该行看起来像:

<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 的回答,但还需要在 &lt;f:ajax&gt; 标签中包含 event 属性以使其正常工作,就像这样

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

【问题讨论】:

    标签: jsf input onchange


    【解决方案1】:

    确实,onchange 属性只是被视为纯文本 HTML 属性,它应该表示 JavaScript onchange 处理函数。这与“普通的”HTML 没有什么不同。该属性中的任何 EL 表达式都将被视为值表达式。另请参阅tag documentation

    根据您的问题历史,您使用的是 JSF 2.x(请在以后的问题中明确提及确切的 JSF 实现/版本,因为与 JSF 1.x 相比,JSF 2.x 中的许多事情都不同)。所以,只要使用新的 JSF 2.0 &lt;f:ajax&gt; 标签就可以了。

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

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

    【讨论】:

    • 我这样做了,现在得到:“javax.servlet.ServletException: Property 'updateTotal1' not found on type com.timesheet.Timesheet”好像 updateTotal1 是一个属性而不是一个方法/动作
    • &lt;f:ajax listener&gt;,你的意思是?显然,f: taglib 的 XML 命名空间根本没有被声明。整个&lt;f:xxx&gt; 标记确实会被视为“纯文本”(阅读:任何 EL 都会被视为值表达式)。
    • 但是已经声明了,我只是没有包含所有的html代码
    • 对不起,这个问题的原因在目前提供的代码/信息中是不可见的。 SSCCE 会很有帮助。
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2012-06-24
    相关资源
    最近更新 更多