<;h:数据表>;在<;上使用ajax重新渲染单个单元格;h:列id>;不可能
在下面的示例中,我有一个单列表,其单元格中放置了输入字段 输入字段的背景色根据ajax更改为绿色(填充时)或红色(空时) XHTML:<;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
<?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" />