【问题标题】:how to use javascript to get jsf table data?如何使用javascript获取jsf表数据?
【发布时间】:2012-05-05 10:45:06
【问题描述】:

我从支持 bean ArrayList 填充了 jsf 数据表。现在我需要将值与表的一列中的值进行比较,我该怎么做?

我的数据表:

<t:dataTable var="tabl"
rowIndexVar="rownum" 
id="data" 
value="#{bean.sortedList}"
>

....... 我要比较数据的列:

<t:column>
    <f:facet name="header">
        <h:commandLink>
            <h:outputText  value="sortedList"/>
        </h:commandLink>
    </f:facet>
     <f:verbatim>&nbsp;</f:verbatim>
    <h:inputText value="#{tabl.numbers}"
                id="numbers">
    </h:inputText>
</t:column>

我的表结构:

<tbody id="myForm:data:tbody_element">
<tr>
...
<td>&#160;<input id="myForm:data:0:workAreaNumberU" name="myForm:data:0:workAreaNumberU" type="text" value="0001" size="4" onkeyup="value_altered(0);"></td>
</tr>
....
<tr>
...
<td>&#160;<span id="_idJsp1:data:1:workAreaNumber">0104</span></td>
...
</tr>
</tbody>

终于这样解决了(基于我的表结构)

var table = document.getElementById("myForm:data:tbody_element");
var new_wa;
for (var i = 0, row; row = table.rows[i]; i++) {
    var new_wa_box = document.getElementById("myForm:data:" + i + ":workAreaNumberU");
    if( new_wa_box != null ) {
        new_wa = new_wa_box.value;
    }else{
        new_wa_box = document.getElementById("myForm:data:" + i + ":workAreaNumber");
        new_wa = new_wa_box.innerHTML;
        }
    alert("row new_wa_box = "+new_wa);
}

【问题讨论】:

    标签: javascript jsf datatable


    【解决方案1】:

    这不是 JSF 问题。这与使用纯 HTML 时没有什么不同。 JavaScript 不适用于 JSF 源代码,但只能用于生成的 HTML 输出(正如您在浏览器中通过右键单击和 View Source 看到的那样)。您的具体错误是您使用了element.innerHTML,它返回了&lt;td&gt; 的整个HTML 内容,而不是先从&lt;td&gt; 获取&lt;input&gt; 元素,然后再从其value 属性获取。

    这应该为您提供&lt;td&gt; 的第一个&lt;input&gt; 元素的值,为简洁起见省略了预检查:

    var value = col.getElementsByTagName("input")[0].value;
    

    我只是想知道在 JavaScript 中而不是在 JSF 中做这一切有什么用处。

    【讨论】:

    • 标签名称应该是 inputText 并且这不起作用。而且,客户端验证与服务器端不同。除非您知道如何打破生命周期并更新托管 bean 中的属性值
    • 在浏览器中打开页面,右键单击并查看源代码。你看到&lt;h:inputText&gt;了吗?不,您只看到&lt;input type="text"&gt;。这也正是 JavaScript 所看到的。这正是我想在我的回答中告诉你的。如果它对您不起作用,那么您已经将细节排除在您的问题之外。但是您现在应该意识到,JavaScript 不会像在 webserver 中那样看到 JSF 源代码,而只会看到 webbrowser 检索到的生成的 HTML。
    • 哦,好吧,所以我必须改用输入。我的页面上有这个:  这个值就是我需要的那个。错误消息是 'getElementsByTagName(...)[0].value' 为空或不是对象
    • 您需要将原始代码中的col.innerHTML 替换为该行。
    • 我刚刚更新了我的问题,是的,我删除了该行。如果我删除“.value”,我会得到输出 [object]。
    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 2011-01-17
    • 2010-12-02
    • 2012-10-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多