如何使用当前版本和h:selectManyCheckBox
中的选定项目创建ofer_has_location对象(从location和ofer连接对象)<h:selectOneMenu id="companyidCompany"
value="#{oferController.selected.companyidCompany}"
title="#{bundle.CreateOferTitle_companyidCompany}"
required="true"
requiredMessage="#{bundle.CreateOferRequiredMessage_companyidCompany}">
<f:ajax event="valueChange" execute="companyidCompany"
render="locationCollection" />
<f:selectItems value="#{companyController.itemsAvailableSelectOne}"/>
</h:selectOneMenu>
<h:outputLabel value="#{bundle.CreateOferLabel_locationCollection}"
for="locationCollection" />
<h:selectManyListbox id="locationCollection" value="locations"
title="#{bundle.CreateOferTitle_locationCollection}">
<c:forEach items="locations">
<f:selectItems var="locations"
value="#{oferController.selected.companyidCompany.locationCollection}" />
</c:forEach>
</h:selectManyListbox>
答案 0 :(得分:1)
为了实现“连接元素”功能,您需要做些什么:
<h:selectOneMenu>
和<h:selectManyLisBox>
),其中第二个元素将取决于第一个元素的选定选项。第二个元素必须具有id才能在之后重新呈现。select
元素(由您选择的两个JSF标记呈现)都有一组option
,不应该通过像<c:forEach>
这样的迭代元素创建({1}}但事实上,这可能是),而是通过<f:selectItem>
/ <f:selectItems>
标签(因此,在评论中删除您的迭代标签)。String
或原始包装器(Integer
等)时,而是作为模型对象(YourClass
对象等)绑定那么你需要告诉JSF两件事:如何从你的类中打印option
的{{1}},以及如何从作为字符串的请求参数重建一个对象。为此,您需要实现Converter,即解释JSF如何进行上述转换。使用this answer和BalusC's blog作为参考点。请注意value
here。<f:selectItems itemValue="...">
,它是<h:selectOneMenu>
;对于value="#{}"
,<h:selectManyListbox>
分别为value="#{}"
和YourClass selectOneMenuValue
或List<YourClass> selectManyListboxValues
bean属性。YourClass[] selectManyListboxValues
的人口将通过select
标记处理。由于内容需要“即时”计算,因此要使其成为<f:ajax>
属性(即拥有listener
)的正确位置。由于您希望重新呈现第二个元素,请在List<YourClass> contentsOfSecondListbox = createListboxValues(YourClass oneMenuSelectedOption);
render
属性中指定其客户端ID。示例here。例如,如果您绑定到<f:ajax>
/ String
值,则不需要转换器部件。
尝试逐步检查错误并纠正错误。