【问题标题】:JSF 2.0: how can I dynamically generate Input componentJSF 2.0:如何动态生成 Input 组件
【发布时间】:2011-12-08 16:28:06
【问题描述】:

在我的应用程序中,我有以下常量类

public class Constants {
    ...
    public static final int MAX_NUM_OF_PICTURES = 2
    ...
}

早些时候,当我使用 JSP 时,我设法根据此常量动态呈现用于上传文件的输入字段,如下所示:

<%
    for (int i = 1; i < Constants.MAX_NUM_OF_PICTURES + 1; i++) {
%>
<tr>
    <td>Upload Picture <%= i %></td>
    <td><input name="<%= i%>" type="file" /></td>
</tr>
<tr>
    <td>Description <%= i %></td>
    <td><input type="text" name="<%= "description" + i%>" id="description" /></td>
</tr>
<%
    }
%>

目前,我正在尝试使用 JSF 来完成上述任务。如果这些输入字段不是动态生成的,我可以轻松地在我的支持 bean 中定义以下属性:

@ManagedBean
@RequestScoped
public class MrBean {
   ...
   private UploadedFile picture1;
   private String       pictDescription1;
   ...
}

但是,由于这些字段现在是动态生成的,我不知道需要提前定义多少属性才能捕获这些上传的文件。

如果有人能给我建议我应该如何解决这个问题,我将不胜感激?

最好的问候,

詹姆斯·特兰

【问题讨论】:

    标签: java jsf dynamic-forms


    【解决方案1】:

    将这些属性放在另一个 javabean 类中,并在您的托管 bean 中收集这些 javabean。

    例如

    public class Picture {
    
        private UploadedFile file;
        private String description;
    
        // ...
    }
    

    @ManagedBean
    @ViewScoped
    public class Profile {
    
        List<Picture> pictures;
    
        public Profile() {
            pictures = new ArrayList<Picture>();
    
            for (int i = 0; i < Constants.MAX_NUM_OF_PICTURES; i++) {
                pictures.add(new Picture());
            }
        }
    
        // ...
    }
    

    然后您可以循环遍历它,例如 &lt;ui:repeat&gt;(或者可能是 &lt;h:dataTable&gt;,但如果您想要两个重复行而不是一个重复行,这并不适合)。

    <table>
        <ui:repeat value="#{profile.pictures}" var="picture" varStatus="loop">
            <tr>
                <td>Upload Picture #{loop.index + 1}</td>
                <td><t:inputFileUpload value="#{picture.file}" /></td>
            </tr>
            <tr>
                <td>Description #{loop.index + 1}</td>
                <td><h:inputText value="#{picture.description}" /></td>
            </tr>
        </ui:repeat>
    </table>
    

    我不知道您使用什么组件库来上传文件,所以我假设它只是 Tomahawk。

    【讨论】:

    • 非常感谢您的帮助!我从来不知道ui:repeat 标签。你是对的关于战斧。实际上,我是按照你的mini-tutorial 来实现这个文件上传功能的。 =)
    猜你喜欢
    • 2011-06-25
    • 2013-12-18
    • 2013-03-15
    • 2013-03-06
    • 2018-07-12
    • 2017-01-30
    • 2012-10-31
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多