Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 <;p:ajax>;事件不';t在发生<;p:选择一个功能表>;_Jsf 2_Primefaces_Selectonemenu - Fatal编程技术网

Jsf 2 <;p:ajax>;事件不';t在发生<;p:选择一个功能表>;

Jsf 2 <;p:ajax>;事件不';t在发生<;p:选择一个功能表>;,jsf-2,primefaces,selectonemenu,Jsf 2,Primefaces,Selectonemenu,问题出在模板的“我的内容”部分。在标记中设置内容页时,内容页的ValueChangeEvent无法再激发。即使使用omnifaces converter,我也无法在SelectOneMenu中获取所选项目的值,因为无法访问CityCharged事件。在我尝试不使用模板的情况下不会出现此问题,并且可以获取要保留的值。请给我一些建议,我在使用模板时遇到了类似的错误。谢谢 这是我的模板页面 <?xml version='1.0' encoding='windows-1252'?> <

问题出在模板的“我的内容”部分。在标记中设置内容页时,内容页的ValueChangeEvent无法再激发。即使使用omnifaces converter,我也无法在SelectOneMenu中获取所选项目的值,因为无法访问CityCharged事件。在我尝试不使用模板的情况下不会出现此问题,并且可以获取要保留的值。请给我一些建议,我在使用模板时遇到了类似的错误。谢谢

这是我的模板页面

<?xml version='1.0' encoding='windows-1252'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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">

<f:view contentType="text/html" id="fview">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <f:metadata>
    <ui:insert name="metadata" />
    </f:metadata>

    <h:head>
          <ui:insert name="head"/>
          <h:outputStylesheet name="css/default.css"/>
    </h:head>

    <h:body>
    <p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"  />

        <p:layout fullPage="true" id = "layout1">  
        <p:ajax event="toggle" listener="#{layoutBean.handleToggle}"/>  
        <p:ajax event="close" listener="#{layoutBean.handleClose}" />  

        <p:layoutUnit id= "contentLayout1" position="north" size="100" resizable="false">  
            <ui:include src="/WEB-INF/templates/header.xhtml"/>
        </p:layoutUnit>  

        <p:layoutUnit id= "contentLayout3" position="west" size="300" resizable="true" 
            header="Main Menu" style="height:580px;overflow:hidden;">  
            <ui:include src="/WEB-INF/templates/menu.xhtml"/>
        </p:layoutUnit>  

         <p:layoutUnit id= "contentLayout4" position="center">  
            <ui:insert name="content"/>
         </p:layoutUnit> 

        <p:layoutUnit  id= "contentLayout2" position="south" resizable="true">  
            <ui:include src="/WEB-INF/templates/footer.xhtml"/>
        </p:layoutUnit>  

    </p:layout>

    </h:body>
</f:view>
</html>

你的问题写得不太好,也不太清楚,但有三件事看起来不对劲:

  • 您在侦听器中使用的
    ValueChangeEvent
    不正确。提供的
    ValueChangeEvent
    用作组件上正确定义的
    valueChangeListener
    的一部分。所以你真正应该做的是:

    p:selectOneMenu id="cboCity" valueChangeListener="#{ManageDeliveryCharges.CityChanged}" converter="omnifaces.SelectItemsIndexConverter"
                value="#{ManageDeliveryCharges.selectedCity}" required="true"
                panelStyle="width:150px" effect ="fade" style="width:187px" var="pg"/> 
    
    使用上面定义的
    valueChangeListener
    ,您可以使用支持bean中定义的侦听器。这导致

  • 只有在提交整个表单时才会触发
    valueChangeListener
    ,即不是ajax请求。因此,同样地,
    在您拥有它的地方是不合适的。你应该:

    <p:selectOneMenu id= "cboCity" onchange="submit();"/>
    
    
    
    onchange
    此处将触发整个表单的提交

  • 没有
    值更改
    事件,只有
    更改


  • 您必须使用
    p:commandButton
    组件提供的事件。欲知详情

    p:commandButton
    只有一个事件,即
    onchange
    。替换为下面的行

    <p:ajax event = "onchange" listener ="#{ManageDeliveryCharges.CityChanged}"/>
    
    
    
    例如
    p:inputText
    支持像
    onblur、onchange、onclick、ondblick、onfocus、onkeydown、onkeypress、onkeypup、onmousedown、onmousemove、onmouseout、onmouseover、onmouseuup、onselect这样的事件
    event
    属性的
    p:ajax
    组件中使用这些事件

    事件名称以上的开头,然后单击ctrl+space显示支持的事件

    p:selectOneMenu id="cboCity" valueChangeListener="#{ManageDeliveryCharges.CityChanged}" converter="omnifaces.SelectItemsIndexConverter"
                value="#{ManageDeliveryCharges.selectedCity}" required="true"
                panelStyle="width:150px" effect ="fade" style="width:187px" var="pg"/> 
    
    <p:selectOneMenu id= "cboCity" onchange="submit();"/>
    
    <p:ajax event = "onchange" listener ="#{ManageDeliveryCharges.CityChanged}"/>