当前位置: 首页 > 面试题库 >

SelectOneMenu更新其他SelectOneMenu

商瀚
2023-03-14
问题内容

当我选择第一个SelectOnMenu的任何项目时,我想更新第二个SelectOneMenu。现在,我从ManagedBean获取SelectOneMenus的值。我想我必须使用AJAX(jquery)将参数发送到ManagedBean。

<h:form>
    <div class="center">
        <h:panelGrid id="editTable" columns="2" styleClass="center">
            ...
            <h:outputText value="#{msg.timetable_list_category}" />
            <h:selectOneMenu class="category">
                <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
                    itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
            </h:selectOneMenu>

                <h:outputText value="#{msg.timetable_list_seminarblock}" />
            <h:selectOneMenu class="seminarblock">
                <f:selectItems value="#{seminarblockBackingBean.seminarblocks}" var="s"
                    itemLabel="#{s.seminarblock_Name}" itemValue="#{s.seminarblock_Id}" />
            </h:selectOneMenu>
            ...
        </h:panelGrid>
        ...
    </div>
</h:form>

问题答案:

实际上,您可以使用ValueChangeListener,当selectOneMenu的值更改时将调用它:

<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}">
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
        itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
</h:selectOneMenu>

然后,在您的bean中,您可以使用以下方法:

public void selectOneMenuListener(ValueChangeEvent event) {
    //This will return you the newly selected
    //value as an object. You'll have to cast it.
    Object newValue = event.getNewValue(); 
    //The rest of your processing logic goes here...
}

要更新页面,您可以将其添加onchange="submit()"到中<h:selectOneMenu/>。对于某些局部渲染,您可以尝试添加以下内容<f:ajax/>而不是onchange="submit()"

<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}">
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c"
        itemLabel="#{c.category_Name}" itemValue="#{c.id}" />
    <f:ajax event="change" execute="@form" render="theIdOfTheComponentYouWantToReRender"/>
</h:selectOneMenu>

如果我没记错的话,您将想要获取在第一个菜单中选择的元素的ID,并根据它填充第二个菜单。然后,您可以呈现另一个selectOneMenu,或者如果需要的话,呈现包装表单一部分的面板。



 类似资料:
  • 问题内容: 我想使用Primefaces 5.2创建一个移动表单,其中一个结果通过Ajax 更新第二个,就像这里的展示示例一样:http : //www.primefaces.org/showcase/ui/ajax/dropdown.xhtml,然后是移动版本。 我创建了一个JSF页面和backingbean 正是 像展示例子,它的工作原理。 但是,当我使用第二个元素添加移动外观时,更新后将其呈

  • 控制器类别:包装样品;

  • 首先请原谅我的英语不正确。。。 我有一个primeface的组件的问题,我试图刷新一个p: selectOneMenu从一个p:命令按钮,但它不工作(它的工作在另一个xhtml页面,但不是在这里,我不明白为什么...) 首先,我从更新backingbean属性的p:autocomplete中选择一个项目(例如:userChoose)。 然后p:commandButton可以调用他的监听器并将use

  • 问题内容: import java.awt.event.ActionListener; import java.util.; import java.awt. ; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.ActionEvent; import java

  • 我有一个表,它有一个主键,这个主键是用table Generator生成的: @tablegenerator(name=“resourceidgenerator”,table=“sequence”,pkColumnName=“name”,pkColumnValue=“resource_type_id”,valueColumnName=“nextid”,allocationSize=1),它工作得很

  • 我有多个谷歌电子表格与预订数据,如预订号码,客户端名称,电子邮件,预订日期等。在所有工作表中,这些列的顺序并不相同。 我想在一个“主”电子表格中更新我所有“源”表中的所有数据。这意味着,一旦添加新行或更新现有行,数据将同步到主电子表格 实现这一目标的最佳方式是什么?Javascript或者是否存在一些现有的Google Sheets插件? 示例表1:快速船预订 示例表2:机场中转预订 主表 非常感