Jsf 从命令按钮更新Primefaces SelectOne菜单中的选定项

Jsf 从命令按钮更新Primefaces SelectOne菜单中的选定项,jsf,primefaces,Jsf,Primefaces,我有一个重置按钮,想选择一个默认值 按下按钮时,在selectOneMenu组件中 我试过不同的帖子,但都没用 这是我的页面: <?xml version="1.0" encoding="UTF-8"?> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/c

我有一个重置按钮,想选择一个默认值 按下按钮时,在selectOneMenu组件中

我试过不同的帖子,但都没用

这是我的页面:

    <?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="${pageContext.request.contextPath}/templates/default.xhtml">
    <ui:define name="content">
        <h:form>
            <h1>Maschinenverwaltung</h1>

            <p:panelGrid id="editMachinePanelGrid" style="margin-top:200px"
                rendered="true">
                <f:facet name="header">
                    <p:row>
                        <p:column colspan="4">Maschinenverwaltung</p:column>
                    </p:row>
                    <p:row>
                        <p:column colspan="4">Maschine</p:column>
                    </p:row>
                </f:facet>
                <p:row>
                    <p:column colspan="2">
                        <p:commandButton id="createModeButton2" ajax="true" type="reset"
                            actionListener="#{machineController.setCreateMode('true')}"
                            value="Neuanlage" update="machineName, deleteMachine" onclick="PF('machineSelector').selectItem(id='noMachine')">

                        </p:commandButton>
                    </p:column>
                    <p:column colspan="2">
                        <p:spacer></p:spacer>
                    </p:column>
                </p:row>
                <p:row></p:row>
                <p:row>
                    <p:column colspan="2">
                        <p:selectOneMenu id="machineSelector"
                            value="#{machineController.currentMachine}" required="true"
                            var="m" effect="puff" converter="MachineConverter">
                            <f:selectItem itemLabel="Maschine auswählen" itemValue="" id="noMachine"/>
                            <f:selectItems value="#{machineController.allMachines}"
                                var="machine" itemLabel="#{machine.name}" itemValue="#{machine}" />
                            <p:column>
                            #{m.name}
                            </p:column>
                            <p:ajax listener="#{machineController.machineSelected}"
                                update="machineName">
                                </p:ajax>
                        </p:selectOneMenu>
                    </p:column>
                    <p:column colspan="2"
                        rendered="#{machineController.deleteMachineDisabled()}">
                        <p:spacer></p:spacer>
                    </p:column>
                    <p:column rendered="#{!machineController.deleteMachineDisabled()}">
                        <p:commandButton id="deleteMachine"
                            action="#{machineController.deleteCurrentMachine()}"
                            value="löschen"
                            disabled="#{machineController.deleteMachineDisabled()}"
                            rendered="#{!machineController.deleteMachineDisabled()}" />
                    </p:column>

                </p:row>
                <p:row>
                    <p:column colspan="2">Maschinenbezeichnung: </p:column>
                    <p:column colspan="2">
                        <p:inputText value="#{machineController.currentMachine.name}"
                            id="machineName"></p:inputText>

                    </p:column>
                </p:row>

                <p:row>
                    <p:column colspan="2">
                        <p:commandButton value="Speichern" partialSubmit="true"
                            process="editMachinePanelGrid"
                            action="#{machineController.saveMachine()}"></p:commandButton>
                    </p:column>
                    <p:column colspan="2">
                        <p:spacer></p:spacer>
                    </p:column>
                </p:row>
            </p:panelGrid>

            <h:messages id="messages" />
        </h:form>
    </ui:define>
    <ui:define name="title">Maschinenverwaltung</ui:define>
</ui:composition>

马斯切尼沃顿酒店
马斯切尼沃顿酒店
马斯切尼
#{m.name}
Maschinenbezeichung:
马斯切尼沃顿酒店
我知道,我必须使用selectValue()方法,但我不知道 如何处理参数以选择值:

<f:selectItem itemLabel="Maschine auswählen" itemValue="" id="noMachine"/>

我使用的是Primefaces 5.1

致意


Heiko

要重置客户端的
p:selectOneMenu
,您可以使用客户端API:

首先为菜单设置一个小部件名称,如下所示:

<p:selectOneMenu widgetVar="wv" ... />

现在,您可以通过客户端API轻松访问和设置菜单值:

<p:commandButton 
    onclick="PF('wv').selectValue('');"
/>

请注意,
selectValue
-方法中的给定值应该是select项的
itemValue
-属性定义的值。由于在您的情况下它是空的(
itemValue=”“
),您可以将空字符串
'
作为值传递,如上所示

无关的:
我想您的select项应该设置属性
noSelectionOption='true'
,而不是(仅)将项值设置为空字符串。

不幸的是,这不起作用。我得到消息Fehler:TypeError:PF(…)未定义。这是我的新代码:此错误通常表示无法解析widgetVar,afaik。您在这里传递selectOneMenu的ID,但是您应该传递小部件名称,正如我上面解释的。