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