Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<;h:数据表>;在<;上使用ajax重新渲染单个单元格;h:列id>;不可能_Ajax_Jsf 2_Datatable_Cell_Render - Fatal编程技术网

<;h:数据表>;在<;上使用ajax重新渲染单个单元格;h:列id>;不可能

<;h:数据表>;在<;上使用ajax重新渲染单个单元格;h:列id>;不可能,ajax,jsf-2,datatable,cell,render,Ajax,Jsf 2,Datatable,Cell,Render,在下面的示例中,我有一个单列表,其单元格中放置了输入字段 输入字段的背景色根据ajax更改为绿色(填充时)或红色(空时) XHTML: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <h

在下面的示例中,我有一个单列表,其单元格中放置了输入字段

输入字段的背景色根据ajax更改为绿色(填充时)或红色(空时)

XHTML:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:f="http://java.sun.com/jsf/core" xml:lang="en" lang="en">
<h:head>
</h:head>
<h:body>
  <h:form>
    <h:dataTable value="#{testBean.getData()}" var="row" id="table">
      <h:column id="cell">
        <h:inputText value="#{row[0]}" id="input" style="background-color:#{empty row[0] ? 'red' : 'green'}">
          <f:ajax event="change" render="cell" />
        </h:inputText>
      </h:column>
    </h:dataTable>
  </h:form>
</h:body>
</html>

爪哇:

@ManagedBean(name=“testBean”)
@会议范围
公共类TestBean{
公共TestBean(){
超级();
}
私有静态字符串[][]initdata={{“test”}、{null}、{null}、{null}、{null}、{null};
私有列表数据=Arrays.asList(initdata);
公共列表getData(){
返回数据;
}
}
问题是

<f:ajax event="change" render="cell" />

不起作用。要使其工作,必须使用render=“input”。或者必须添加为的直接子级(然后可以使用其id重新呈现),但我的用例比这个简化示例更复杂。如果可能的话,我希望避免额外的标记和html嵌套。当然,重新呈现整个表不是一个选项

那么,为什么不可能重新渲染

提前感谢,

阿列克西


PS:使用MyFaces 2.1.12和Mojarra 2.1.24测试这是因为datatable是一个重复构造,它使用列组件呈现datatable中的所有行。更具体地说,即使在输出(HTML)中有许多行,在JSF组件树中只有一个组件负责处理或呈现所有行,并且在
update
属性中,您只能指定组件id,而不能指定特定HTML标记的客户端id。有关可能更好的解释,请参阅。

但它没有解释render=“input”工作的原因。顺便说一下,本例中的“输入”是“行范围”的,并在相关JSF生命周期阶段正确地转换为“表::输入”。但“细胞”显然不是。
<f:ajax event="change" render="cell" />