2013-04-29 58 views
0

如何创建ofer_has_location对象(加入从位置和奥弗对象)使用当前奥弗以及从H所选项目:selectManyCheckBox如何在jsf中实现foreach?

<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> 
+1

没有理由使用''。只要摆脱它,提供转换器,在列表框中使用正确的值绑定,并在AJAX监听器方法中准备必要的数据,就是这样。 – skuntsel 2013-04-30 02:13:12

+0

@skuntsel,你需要打破所有的下降 – kolossus 2013-04-30 02:22:24

+0

@kolossus然后,我会离开OP没有他的个人经验,这可能会对他的写真实世界的应用程序的能力产生负面影响:) – skuntsel 2013-04-30 06:47:47

回答

1

需要,以实现“连接要素”的功能做什么:

  1. 有两个元件(<h:selectOneMenu><h:selectManyLisBox>你的情况),其中,第二个将依赖于所述第一个的选定选项(多个)。第二个元素必须有一个id才能在之后被重新渲染。
  2. 每个HTML select元素(由您选择的两个JSF标记呈现)将具有一组option s,它们不应通过像<c:forEach>这样的迭代元素创建(尽管它实际上可能),而是通过<f:selectItem>/<f:selectItems>标签(因此,在注释中删除您的迭代标签)。
  3. 当组件中的值不是普通的String或原始包装(Integer等),而是作为模型对象(YourClass对象等)绑定时,那么您需要告诉JSF两件事情:如何能够它会从您的类中打印optionvalue以及如何从请求参数(字符串)重建对象。为此,您需要实现Converter,即解释JSF如何执行上述转换。作为参考点使用this answerBalusC's blog。请注意0​​here的适当语法。
  4. 由这两个组件绑定的模型值也需要表示您的类,就像选定项目的值一样。对于<h:selectOneMenu>它是value="#{}";对于<h:selectManyListbox>,它分别是value="#{}"YourClass selectOneMenuValueList<YourClass> selectManyListboxValuesYourClass[] selectManyListboxValues bean属性。
  5. 第二个select的人口将通过<f:ajax>标签处理。由于内容需要“即时”计算,因此要使其处于其listener属性(即具有List<YourClass> contentsOfSecondListbox = createListboxValues(YourClass oneMenuSelectedOption);)的正确位置。因为您希望重新渲染第二个元素,请在render属性<f:ajax>中指定其客户端ID。示例here

如果您有约束力,例如对String/String[]值,您将不需要转换器部件。

试着一步一步找出你的错误并纠正错误。

+0

我不能让它工作,值我的自定义转换器getAsObject方法返回“开”,我不知道为什么 – 2013-05-01 22:14:00

+0

得到它的工作!!!!!!非常感谢你!!! jpa甜美地诠释了连接表,它像一个魅力一样工作!非常感谢你!!!! – 2013-05-02 01:51:08