Java 如何在JSF中制作可重用组件?
我希望有一个可重用的ui组件,它与模型相关联 例如:Java 如何在JSF中制作可重用组件?,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我希望有一个可重用的ui组件,它与模型相关联 例如: 我有一个selectonemenu链接到另一个selectonemenu(如department->sub department) 希望使其成为复合组件 这个复合组件将绑定到一个特定的JSFbean 我认为如果我只使用一个compositeComponent,这个想法就行了 但是,如果我使用多个相同类型的compositeComponent,这将不起作用,因为compositeComponent的JSF Bean将是相同的(在本例中,我使用视
<!-- one composite component that has 2 chained selectOneMenus -->
<h:selectOneMenu
...
value="#{myCompositeComponentBean.firstComboValue}"
valueChangeListener="#{myCompositeComponentBean.yyy}">
<f:ajax event="valueChange" execute="@this" ... />
<f:selectItem itemLabel="Choose one .." noSelectionOption="true" />
<f:selectItems value="#{myCompositeComponentBean.firstComboList}" .... />
</h:selectOneMenu>
<h:selectOneMenu
...
value="#{myCompositeComponentBean.secondComboValue}"
valueChangeListener="#{myCompositeComponentBean.bbb}">
<f:selectItem itemLabel="Choose one .." noSelectionOption="true" />
<f:selectItems value="#{myCompositeComponentBean.secondComboList}" .... />
</h:selectOneMenu>
有可能实现这种可重用性吗
谢谢。在JSF2.0中,创建复合组件很简单。 以下是一个很好的教程:
根据您试图实现的内容,您可以使用一些“支持组件”(=与facelet复合组件关联的java类)。见此帖:
不过,根据您的实际操作,您可能可以更好地定义复合组件,主要是使用更多参数和更好的传递值模型(如果需要)。我对您的应用程序缺乏一些知识,无法提供更好的建议。我不确定我是否完全理解您,但您可能希望将一个参数传递给您构建的组件组合
main department : <my:comboChainComponent worksOn="#{page1Bean.bean1}" /> <!-- 2 select items will be rendered here -->
secondary department : <my:comboChainComponent worksOn="#{page1Bean.bean2}"/> <!-- another 2 select items will be rendered here -->
主要部门:
第二部门:
希望它有帮助……为什么不使用这种方法呢
<mytag:combo id="combo1"
value="#{bean.firstData}"
model="#{globalBean.getList()}"
update="form1:combo2" />
<mytag:combo id="combo2"
value="#{bean.secondData}"
model="#{globalBean.getSubList(bean.firstData)}" />
可以使用复合属性
...
<composite:interface name="combo">
... define your attributes here
</composite:interface>
<composite:implementation>
<p:outputPanel id="content">
<p:selectOneMenu id="select_menu_1" value="#{cc.attrs.value}">
<f:selectItems value="#{cc.attrs.model}" />
<p:ajax event="change" process="@this" update="#{cc.attrs.update}" />
//add converter if you want
</p:selectOneMenu>
</p:outputPanel>
</composite:implementation>
。。。
... 在这里定义您的属性
//如果需要,请添加转换器
您好,谢谢您的回复。我在开发复合组件方面还没有技术上的困难,但更重要的是如何使这个复合组件与耦合的JSF Bean一起可重用,它可以在一个页面中多次使用。嗨,Albert,你可以在一个页面中随心所欲地使用复合组件(即使我真的不了解需要)。我意识到我原来的帖子仍然缺乏。我将很快构建一个简单清晰的示例来演示我原来的问题。谢谢你的建议。让你的示例更简单可能会有用,但我的印象是,支持组件应该可以解决你的问题;-)
main department : <my:comboChainComponent worksOn="#{page1Bean.bean1}" /> <!-- 2 select items will be rendered here -->
secondary department : <my:comboChainComponent worksOn="#{page1Bean.bean2}"/> <!-- another 2 select items will be rendered here -->
<mytag:combo id="combo1"
value="#{bean.firstData}"
model="#{globalBean.getList()}"
update="form1:combo2" />
<mytag:combo id="combo2"
value="#{bean.secondData}"
model="#{globalBean.getSubList(bean.firstData)}" />
...
<composite:interface name="combo">
... define your attributes here
</composite:interface>
<composite:implementation>
<p:outputPanel id="content">
<p:selectOneMenu id="select_menu_1" value="#{cc.attrs.value}">
<f:selectItems value="#{cc.attrs.model}" />
<p:ajax event="change" process="@this" update="#{cc.attrs.update}" />
//add converter if you want
</p:selectOneMenu>
</p:outputPanel>
</composite:implementation>