JavaServer Faces的新手(以及Stack Overflow!)所以我希望我能正确地描述这个问题。
在这个例子中,我使用PrimeFaces进行自定义布局。
这是我正在开发的基本调查应用程序。我试图在页面上显示一组可变长度的单选按钮。麻烦的是,当我遍历选择项时,FOR属性似乎没有正确评估。
当页面使用ui:repeat迭代数据时会发生此问题。我也在dataList和dataTable中尝试了这个并且具有相同的效果。
此代码有效:
<ui:repeat value="#{surveyMB.groupHelper}" var="vargroup">
<primefaces:outputPanel id="customPanel" style="margin-bottom:10px">
<primefaces:panelGrid>
<ui:repeat value="#{vargroup.questionArray}" var="varquestion">
<primefaces:selectOneRadio styleClass="selectOneRadio" id="customRadio" value="#{varquestion.selectionId}" layout="custom">
<f:selectItems value="#{vargroup.selectionMap}" id="selectItems2"></f:selectItems>
</primefaces:selectOneRadio>
<primefaces:row>
<primefaces:column>
<primefaces:radioButton id="opt1" for="customRadio" itemIndex="0" />
</primefaces:column>
<primefaces:column>
<primefaces:radioButton id="opt2" for="customRadio" itemIndex="1" />
</primefaces:column>
<primefaces:column>
<primefaces:radioButton id="opt3" for="customRadio" itemIndex="2" />
</primefaces:column>
<primefaces:column>
<primefaces:radioButton id="opt4" for="customRadio" itemIndex="3" />
</primefaces:column>
<primefaces:column>
<primefaces:radioButton id="opt5" for="customRadio" itemIndex="4" />
</primefaces:column>
</primefaces:row>
</ui:repeat>
</primefaces:panelGrid>
</primefaces:outputPanel>
</ui:repeat>
此代码不会:
<ui:repeat value="#{surveyMB.groupHelper}" var="vargroup">
<primefaces:outputPanel id="customPanel" style="margin-bottom:10px">
<primefaces:panelGrid>
<ui:repeat value="#{vargroup.questionArray}" var="varquestion">
<primefaces:selectOneRadio styleClass="selectOneRadio" id="customRadio" value="#{varquestion.selectionId}" layout="custom">
<f:selectItems value="#{vargroup.selectionMap}" id="selectItems2"></f:selectItems>
</primefaces:selectOneRadio>
<primefaces:row>
<ui:repeat var="item" value="#{vargroup.selectionItems}" varStatus="status">
<primefaces:column>
<primefaces:radioButton id="opt" for="customRadio" itemIndex="#{status.index}" />
</primefaces:column>
</ui:repeat>
</primefaces:row>
</ui:repeat>
</primefaces:panelGrid>
</primefaces:outputPanel>
</ui:repeat>
当页面遍历两个ui:repeat标记时,会针对每个问题更新customRadio id。在第一个示例中,静态单选按钮的FOR属性正确更新并引用唯一的customRadio id。在第二个示例中,FOR属性似乎没有正确评估并抛出以下异常:
错误500:javax.servlet.ServletException:找不到带表达式的组件&#34; customRadio&#34;引自&#34; form1:j_id373995743_164ab843:2:j_id373995743_164ab90b:0:j_id373995743_164aba20:0:opt&#34;
由于每个问题可以有不同长度的响应和不同的答案,我希望能够动态显示它们,而不必为每种可能性硬编码静态响应。是否有解决方案可以正常显示,或者可能是任何人都可以建议以不同方式执行此操作的过程?
(注意:我在重复中构建radioButton的方式可能还有其他问题,但主要错误是我最关心的错误)
更新:我的目标是在多个列中跨越标题行(最终水平和垂直)执行响应选项。 See this article。没有(希望)必须构建自定义ui组件。我知道那可能在做梦!
但主要目标是单选按钮长度可变。一组答案可能有五个答案,另一组可能只有三个答案。但每组都有相同的数字,所以我不会混淆这些表格。
如果没有某种方法来覆盖或强制对嵌套for属性进行前置操作,我能想到的唯一方法是破解我在辅助bean中的帮助程序类,将每个单选按钮项显示为一个唯一的字段,这样我就不会#39; t必须遍历选项。