获得调查问卷JSF的结果

时间:2012-11-17 14:45:14

标签: java jsf jsf-2 map

我只有一个想法,意识到获得用户的答案。我决定使用List<String> questionsWithAnswers并在此列表中添加“1_1”,“1_2”,“1_3”,“2_1”等对。像这样的东西。但即便有这个想法我也有问题。同样重要的是我将使用网络服务(例如,使用地图作为保存配对问题和答案的结构的约束)。

********我的豆子********

    public class TestBean implements Serializable{

        private static final long serialVersionUID = 1L;

        private List<Test> testList;
        private List<Answer> answerList;
        private List<Subject> subjectList;
        private Map<Question, List<QuestionAnswer>> mapQestionsWithAnswers;
        private List<String> questionAnswerList;

        private Long subjectId = 0L;
        private Test test;
//...
}

getTest.xhtml

<c:forEach items="#{test.testBean.mapQestionsWithAnswers}"
                    var="entry">
                    <h:inputHidden value="#{entry.key.questionId}" />
                    <h:outputText value="#{entry.key.question}" rendered="#{not empty entry.value}"/>                   
                    <h:selectManyCheckbox value="#{test.testBean.questionAnswerList}" layout="pageDirection">
                        <f:selectItems value="#{entry.value}" var="ans"
                            itemValue="#{fnc:concat(ans.answer.answerId, entry.key.questionId)}"
                            itemLabel="${ans.answer.answer}" />                         
                    </h:selectManyCheckbox>
                </c:forEach>
                <h:commandButton value="#{msgs['page.content.passtest']}" action="#{test.passTest}" />

对于concatination questionId with answerId我使用concat。我在Concatenate strings in JSF/JSP EL and Javascript

中找到了这个

但我无法在 entry.key.questionId

中获得 itemValue="#{fnc:concat(ans.answer.answerId, entry.key.questionId)}" 的价值

我不明白为什么。

我在哪里可以犯错误?我想问一些关于更多逻辑和简单决定类似问题的来源。感谢

2 个答案:

答案 0 :(得分:2)

您不需要连接:

itemValue="#{fnc:concat(ans.answer.answerId, entry.key.questionId)}"

可能很简单:

itemValue="#{ans.answer.answerId}, #{entry.key.questionId}"

答案 1 :(得分:1)

为什么不使用自己的方法连接?您可以使用名为concatenatorBean的方法

的bean

String customConcat(String str1, String str2) {
   return str1+"_"+str2;
}

然后在getTest.xhtml中,您可以使用自己的连接器来解决问题。