这是我的代码的相关部分(我正在尝试将时间表组件添加到我学校的门户网站):
<h:panelGroup layout="block" id="sc-timetable-slots" styleClass="traverse ui-helper-clearfix">
<h:form id="sc-timetable-slots-table" styleClass="sc-left-bulk ui-widget-content">
<div class="sc-8-column">
<h:panelGroup layout="block" styleClass="sc-hours">
<ul>
<li class="ui-widget-header"><h:outputText value="H" /></li>
<c:forEach begin="4" end="24" var="h">
<li>#{h}:00</li>
</c:forEach>
</ul>
</h:panelGroup>
</div>
<ui:repeat value="#{timetableSlot.dow}" var="dow" varStatus="ix">
<div class="sc-8-column">
<h:panelGroup layout="block" styleClass="sc-timetable-slots">
<ul>
<li class="ui-widget-header"><h:outputText value="#{msg[dow]}"/></li>
<ui:repeat value="#{timetableSlot.getSlots(login.person,ix.index)}" var="slot">
<li class="sc-timetable-item">
<h:commandLink action="#{timetableSlot.edit(slot)}" value="#{slot.timeStart} : #{slot.timeEnd}" styleClass="sc-button incomplete">
<f:ajax render=":sc-timetable-slots" onevent="reRender"/>
</h:commandLink>
</li>
</ui:repeat>
<li>
<h:commandLink action="#{timetableSlot.edit(login.person,ix.index)}" value="#{msg['timetable.slots.new']}" styleClass="sc-button incomplete">
<f:ajax render=":sc-timetable-slots" onevent="reRender"/>
</h:commandLink>
</li>
</ul>
</h:panelGroup>
</div>
</ui:repeat>
</h:form>
<h:form id="sc-timetable-slots-edit" styleClass="sc-right-detail ui-widget-content" rendered="#{not empty timetableSlot.edited}">
<span class="traverse ui-widget-header">#{msg['timetable.slots.edit']}</span>
<h:panelGrid styleClass="traverse" columns="2">
<h:outputLabel for="timeStart" value="#{msg['timetable.slots.start']}"/>
<h:inputText id="timeStart" value="#{timetableSlot.edited.timeStart}"/>
<h:outputLabel for="timeEnd" value="#{msg['timetable.slots.end']}"/>
<h:inputText id="timeEnd" value="#{timetableSlot.edited.timeEnd}"/>
<h:commandButton type="submit" styleClass="sc-button incomplete" action="#{timetableSlot.save}" value="#{msg['nav.save']}">
<f:ajax render=":sc-timetable-slots" onevent="reRender"/>
</h:commandButton>
</h:panelGrid>
</h:form>
</h:panelGroup>
commandLinks工作正常,但“save”commandButton没有。这不是“渲染”属性,我尝试没有它,同样。问题是,它根本不会触发,没有生成XHR,按钮已经死了。我尝试了不同的组合,甚至将“render”属性设置为“@all”。依然没有。我最后一次询问涉及commandButton和ajax的事情时,我很着急所以我最终解决了这个问题 - 但这次我想深究它。 :d
答案 0 :(得分:1)
免责声明:我没有尝试在本地重现,因为代码太多而不是SSCCE值得
但是,我知道当你有多个ajax表单通过一般/公共父ID互相呈现时,后续请求中任何其他表单的提交都将失败,因为视图状态在JS重新渲染后,不会附加为隐藏字段。但是,如果是这种情况,那么提交它的第二次尝试应该可行。也许故事还有更多内容,但首先,您需要在render
的{{1}}属性中明确指定其他表单的ID。
对第一个表单中的<f:ajax>
个标记执行此操作:
<f:ajax>
在您的特定情况下,<f:ajax render=":sc-timetable-slots :sc-timetable-slots-edit" onevent="reRender"/>
是其他表单的ID。