Java 包含inputText的DataTable:可以使用JSF自定义组件吗

Java 包含inputText的DataTable:可以使用JSF自定义组件吗,java,jsf,Java,Jsf,我是JSF新手,对于我正在研究的应用程序,我必须做一个多字段输入表单 简而言之,用户在输入数据时应该有一个inputText和一个“添加”按钮,该按钮添加一个新的输入文本以输入另一个数据。当用户完成后,他按下另一个提交按钮。 我寻找了一些已经完成的东西,但没有找到任何东西,所以我决定创建自己的定制jsf组件 其想法是创建一个组件,该组件将包含dataTable中每一行的inputText的dataTable与一个按钮相结合,该按钮将一行添加到绑定到dataTable的集合中 我正在浏览jsf文档

我是JSF新手,对于我正在研究的应用程序,我必须做一个多字段输入表单

简而言之,用户在输入数据时应该有一个inputText和一个“添加”按钮,该按钮添加一个新的输入文本以输入另一个数据。当用户完成后,他按下另一个提交按钮。 我寻找了一些已经完成的东西,但没有找到任何东西,所以我决定创建自己的定制jsf组件

其想法是创建一个组件,该组件将包含dataTable中每一行的inputText的dataTable与一个按钮相结合,该按钮将一行添加到绑定到dataTable的集合中

我正在浏览jsf文档和书籍,但我有点困惑,我不确定是否有可能创建这样一个组件。。。 有人能帮我吗?
TIA

你可以做任何你想做的事


您可以使用现有控件构建接近所需的内容。充分利用JSF的一个好方法是为视图定制模型。例如,此视图显示允许向数据表添加值的编辑选项

<f:view>
    <h:form>
        <h:dataTable value="#{people.list}" var="row">
            <h:column>
                <f:facet name="header">
                    <h:outputText value="#" />
                </f:facet>
                <h:selectBooleanCheckbox value="#{row.selected}" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="First Name" />
                </f:facet>
                <h:inputText value="#{row.firstname}" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Last Name" />
                </f:facet>
                <h:inputText value="#{row.lastname}" />
            </h:column>
            <f:facet name="footer">
                <h:panelGroup>
                    <h:commandButton value="Add Row" action="#{people.addPerson}" />
                    <h:commandButton value="Delete Selected"
                        action="#{people.deleteSelected}" />
                    <h:commandButton value="Finish" action="#{people.finish}" />
                </h:panelGroup>
            </f:facet>
        </h:dataTable>
    </h:form>
</f:view>
faces-config.xml:

<managed-bean>
    <managed-bean-name>people</managed-bean-name>
    <managed-bean-class>addmultiple.People</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

人
多人
一场
这种方法非常灵活,并且带有一些CSS,看起来非常不错。例如,只需对视图和模型进行一些更改,就可以只编辑最后一行


如果生成的体验不够丰富,或者需要可以重用的东西,可以创建自定义控件。在不确切知道您想要什么的情况下,很难了解具体情况,但您可能需要:

  • 一种用于发出HTML和解码表单请求的新方法
  • (可能)一个新的,可能是扩展的,以及一个用于公开特定于renderkit(例如HTML)属性的
  • 允许在JSP中使用控件的新JSP
  • 在faces-config.xml中定义上述所有内容(请参阅)

  • 我在这里登陆搜索带有输入字段的Datatable&这个答案非常清晰。谢谢(y)
    public class Person implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private String firstname;
        private String lastname;
        private transient boolean selected = false;
    
        public String getFirstname() {
            return firstname;
        }
    
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
    
        public String getLastname() {
            return lastname;
        }
    
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
    
        public boolean isSelected() {
            return selected;
        }
    
        public void setSelected(boolean selected) {
            this.selected = selected;
        }
    
    }
    
    <managed-bean>
        <managed-bean-name>people</managed-bean-name>
        <managed-bean-class>addmultiple.People</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>