我碰到了墙。 我知道a4j和丰富的标签非常好(我使用Seam 2.2.0和Richfaces 3.3.1)。但是,我试图做一些非常简单的事情,但在丰富的:modalPanel中。a4j:内部支持:modalPanel
似乎rich:modalPanels不允许触发Ajax事件。这里有一个简单的故障: 我有一个h:selectOneMenu,其中有一些项目,其值被附加到一个支持bean。附加到h:selectOneMenu是一个a4j:支持标签,因此无论何时触发change事件,辅助bean都应该被更新。真的很简单的东西呃?
但是,当这个h:selectOneMenu在rich:modalPanel中时,onchange事件不会更新辅助bean,直到rich:modalPanel关闭。
我可以证实这一点,因为我在Eclipse调试模式下运行它,并且在h:selectOneMenu上连接的属性的setter上有一个断点。 这让我生气!这是Ajax的香草,但富有:modalPanels似乎不允许它。
所以,问题是:我可以在一个丰富的:modalPanel内做Ajax的东西吗?我基本上试图使用rich:modalPanel作为窗体(我试过a4j:form和h:form无济于事),它会对下拉列表的变化做出反应(例如,当用户更改下拉列表时,部分表单应该被重新修改)。我想做一些不可能的事吗?
这里的modalPanel的简化版本:
<rich:modalPanel id="quickAddPanel">
<div>
<a4j:form id="quickAddPaymentForm" ajaxSubmit="true">
<s:decorate id="paymentTypeDecorator">
<a4j:region>
<h:selectOneMenu
id="paymentType"
required="true"
value="#{backingBean.paymentType}"
tabindex="1">
<s:selectItems
label="#{type.description}"
noSelectionLabel="Please select..."
value="#{incomingPaymentTypes}"
var="type"/>
<s:convertEnum/>
<a4j:support
ajaxSingle="true"
event="onchange"
eventsQueue="paymentQueue"
immediate="true"
limitToList="true"
reRender="paymentTypeDecorator, paymentDetailsOutputPanel, quickAddPaymentForm"/>
</h:selectOneMenu>
</a4j:region>
</s:decorate>
</fieldset>
<fieldset class="standard-form">
<div class="form-title">Payment details</div>
<a4j:outputPanel id="paymentDetailsOutputPanel">
<h:outputText value="This should change whenever dropdown changes: #{backingBean.paymentType}"/>
</a4j:outputPanel>
</fieldset>
</a4j:form>
</div>
</rich:modalPanel>
问候, 安迪
是什么动作由a4j调用:支持onchange事件?如果是,那么你有没有确认该行动被称为? – niksvp 2011-01-11 09:52:50
不是。这是一个简单的a4j:support event ='onchange'绑定,确保当下拉改变时,绑定的支持bean值将得到更新。它确实得到更新,但只有在模式面板关闭后。如果它不在模式面板中,则每次更改下拉值时都会更新bean。 – 2011-01-11 10:01:47