jsf 2.x在<h:datatable> </h:datatable> </c:set>中使用类似的<c:set>行为

时间:2013-09-04 16:46:57

标签: jsf-2 datatable

我正在尝试jsf 2.x&lt; h:datatable&gt;我需要像&lt; c:set&gt;这样的东西里面的行为。这是我的代码,

<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捕获到我的输入字段中,让我使用它(例如:更新)。

我该如何实现这种行为?

感谢。

1 个答案:

答案 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);
    }

}