在以下示例中,我有一个单列表,其中输入字段放置在其单元格中。
每个 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")
@SessionScoped
public class TestBean {
public TestBean() {
super();
}
private static String [][] initdata = {{"test"},{null},{null},{null},{null}};
private List<String[]> data = Arrays.asList(initdata);
public List<String[]> getData() {
return data;
}
}
问题是,那
<f:ajax event="change" render="cell" />
不起作用。要使其工作,必须使用 render="input"。或者 <h:panelGroup> 必须添加为 <h:column> 的直接子级(然后可以使用其 id 重新渲染)但是我的用例比这个简化的例子更复杂。如果可能,我想避免额外的标记和 html 嵌套。而且,当然,重新渲染整个表格不是一种选择。
那么,为什么不能重新渲染 <h:column> 呢?
提前致谢,
阿列克谢
PS:使用 MyFaces 2.1.12 和 Mojarra 2.1.24 测试