Jsf 使用<;用户界面:重复>&书信电报;h:输入文本>;在两个字符串列表上打印第一个字符串并获取第二个字符串

Jsf 使用<;用户界面:重复>&书信电报;h:输入文本>;在两个字符串列表上打印第一个字符串并获取第二个字符串,jsf,primefaces,javabeans,Jsf,Primefaces,Javabeans,我目前正在使用JSF和PrimeFaces在Java8中开发一个web应用程序。我使用ui:repeat成功地打印了字符串的第一个列表,但是我无法检索用户的答案(我想将其添加到bean FormulaireComplete中的列表响应中) 我必须承认我不知道如何在a.xhtml中初始化对象列表。它可能来自这里,但我真的不确定。我在stackoverflow上找到了一些例子,但是列表已经创建了很多元素 包含响应的类FormulaireComplete(我没有在这里列出getter和setter,但

我目前正在使用JSF和PrimeFaces在Java8中开发一个web应用程序。我使用ui:repeat成功地打印了字符串的第一个列表,但是我无法检索用户的答案(我想将其添加到bean FormulaireComplete中的列表响应中)

我必须承认我不知道如何在a.xhtml中初始化对象列表。它可能来自这里,但我真的不确定。我在stackoverflow上找到了一些例子,但是列表已经创建了很多元素

包含响应的类FormulaireComplete(我没有在这里列出getter和setter,但它们当然存在于代码中):

@Named
@请求范围
公共类FormulaireComplete实现了可序列化{
私人名单回复;
公共配方完整(){
超级();
reponses=newarraylist();
}
//验证表单
公共字符串完成(){
reponsedao.create(reponses);
返回“./admin.xhtml?faces redirect=true”;
}

}
您没有将问题答案映射到问题的数据结构。我建议创建一个新类型,将问题和答案封装在一起

关联问题和答案的数据结构:

public class Response {
   private Question question;
   private Answer answer;
}
单独加载问题和答案并将其映射到此新数据类型的托管bean:

@Named
@RequestScoped
public class FormulaireComplete implements Serializable {
    private List<Response> responses;

    public FormulaireComplete() {
        super();
        reponses = new ArrayList<>();
    }

    @PostConstruct
    init() {
         List<Question> questions = loadQuestions();
         List<Answer> answers = loadAnswers();
         for(Question q: questions) {
             for(Answer a: answers) {
                 if(q.id == a.id) {
                     this.responses.add(new Response(q, a));
                 }
             }
         }
    }

    //validate form
    public String complete() {
        ReponsesDAO.create(reponses);
        return "../admin.xhtml?faces-redirect=true";
    }
}
@Named
@请求范围
公共类FormulaireComplete实现了可序列化{
私人名单答复;
公共配方完整(){
超级();
reponses=newarraylist();
}
@施工后
init(){
列出问题=加载问题();
列表答案=加载答案();
关于(问题q:问题){
(答案a:答案){
如果(q.id==a.id){
添加(新的响应(q,a));
}
}
}
}
//验证表单
公共字符串完成(){
reponsedao.create(reponses);
返回“./admin.xhtml?faces redirect=true”;
}
}
显示已初始化答案的数据:

  <ui:repeat value="#{bean.responses}" var="response">
    #{response.question.description}

    <p:inputTextarea value="#{response.answer.input}"></p:inputTextarea>

    <p:selectOneMenu value="#{response.answer.score}">
      <f:selectItems ... />
    </p:selectOneMenu>
  </ui:repeat>

#{答复.问题.说明}
我不想这样做(因为它涉及一些更改),但我认为你是对的,这是最好的选择!谢谢@DavidZ!