我正在尝试jsf 2.x< h:datatable>我需要像< c:set>这样的东西里面的行为。这是我的代码,
<h:column id="passCol">
<f:facet id="passFct" name="header">Password</f:facet>
<h:inputText value="#{tech.password}" rendered="#{(tech.id).trim() == (technicianBean.technicianId).trim()}"/>
<h:outputText value="#{tech.password}" rendered="#{(tech.id).trim() != (technicianBean.technicianId).trim()}"/>
</h:column>
我假装的内容应如下所示,
<h:column id="passCol">
<f:facet id="passFct" name="header">Password</f:facet>
<c:set property="inputField" target="#{myBean}" value="#{tech.password}" />
<h:inputText value="#{myBean.inputField}" rendered="#{(tech.id).trim() == (technicianBean.technicianId).trim()}"/>
<h:outputText value="#{tech.password}" rendered="#{(tech.id).trim() != (technicianBean.technicianId).trim()}"/>
</h:column>
是数据表中的var设置。这样我就可以将tech.password捕获到我的输入字段中,让我使用它(例如:更新)。
我该如何实现这种行为?
感谢。
答案 0 :(得分:0)
JSF已经引用了它迭代的元素集合。所以有这样的情况:
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head />
<h:body>
<h:form>
<h:dataTable value="#{bean.itemsList}" var="item">
<h:column>
<h:inputText value="#{item.value}" />
</h:column>
</h:dataTable>
<h:commandButton action="#{bean.update}" value="submit" />
</h:form>
</h:body>
即使#{item.value}
没有直接引用托管bean,它也是一个输入组件,因此JSF知道在哪里写入它的值。如果您使用此托管bean,则在单击“提交”时会注意到正在更新表引用的值列表。实际上,当您单击按钮时,此代码将打印出列表的更新值。
@ManagedBean
@ViewScoped
public class Bean {
public class Item {
private String value;
public Item(String val) {
value = val;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "Item [value=" + value + "]";
}
}
private List<Item> itemsList = Arrays.asList(new Item("value1"), new Item(
"value2"));
public List<Item> getItemsList() {
return itemsList;
}
public void update() {
System.out.println(itemsList);
}
}