0

我正在尝试一个 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 捕获到我的输入字段中,让我可以使用它(例如:更新)。

我怎样才能实现这种行为?

谢谢。

4

1 回答 1

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>

Even#{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);
    }

}
于 2013-09-04T20:40:15.013 回答