<p:ajax> 无法将 <p:ajax> 附加到非 ClientBehaviorHolder 父级
Posted
技术标签:
【中文标题】<p:ajax> 无法将 <p:ajax> 附加到非 ClientBehaviorHolder 父级【英文标题】:<p:ajax> Unable to attach <p:ajax> to non-ClientBehaviorHolder parent 【发布时间】:2013-11-26 03:47:57 【问题描述】:我使用 JSF 2,primefaces 4.0,我尝试使用 DataTable - In-Cell Editing,因为它是在 primefaces 展示中生成的,但我有一个错误,尽管我复制了展示中显示的相同示例 错误是
<p:ajax> Unable to attach <p:ajax> to non-ClientBehaviorHolder parent
这是xhtml页面代码
<rich:panel style="width : 800px; height : 551px; " >
<f:facet name="header" >
<h:outputText value="Tableau des articles" align="center" style="FONT-SIZE: small;"/>
</f:facet>
<h:form id="form">
<p:dataTable id="cars" var="car" value="#articlesbean.LMatpilotaccess1" editable="true" editMode="cell" widgetVar="carsTable">
<f:facet name="header">
Matériel du pilotage et accessoires
</f:facet>
<p:growl id="messages" showDetail="true"/>
<p:contextMenu for="cars" widgetVar="cMenu">
<p:menuitem value="Edit Cell" icon="ui-icon-search" onclick="PF('carsTable').showCellEditor();return false;"/>
<p:menuitem value="Hide Menu" icon="ui-icon-close" onclick="PF('cMenu').hide()"/>
</p:contextMenu>
<p:column headerText="Serie" style="width:25%">
<p:ajax event="cellEdit" listenner="#articlesbean.onCellEdit" update=":form:messages" />
<p:cellEditor>
<f:facet name="output"><h:outputText value="#car.serie" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="#car.serie" style="width:96%"/></f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</h:form>
</rich:panel>
这是我的豆子
@ManagedBean(name="articlesbean")
@ViewScoped
public class ArticlesBean implements Serializable
@Inject
private ArticlesDAO articleDAO;
@Inject
private Matpilotaccess1 matpilotaccess1;
@Inject
private Matpilotaccess2 matpilotaccess2;
@Inject
private Poteaux poteaux ;
@Inject
private Travgc1 travgc1;
@Inject
private Travgc2 travgc2;
@Inject
private Travresurbain travresurbain;
private List LMatpilotaccess1 = new ArrayList();
private List LMatpilotaccess2 = new ArrayList();
private List LPoteaux = new ArrayList();
private List LTravgc1 = new ArrayList();
private List LTravgc2 = new ArrayList();
private List LTravresurbain = new ArrayList();
public void onCellEdit(CellEditEvent event)
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if(newValue != null && !newValue.equals(oldValue))
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
//// Getters and setters
【问题讨论】:
【参考方案1】:您将<p:ajax>
嵌套在<p:column>
中。 <p:ajax>
需要嵌套在实现ClientBehaviorHolder
interface 的组件中。但是,<p:column>
后面的Column
component class 并没有实现它。 DataTable
component class 后面的 <p:dataTable>
实现了它。
您应该将 <p:ajax>
嵌套在 <p:dataTable>
中:
<p:dataTable ...>
<p:ajax ... />
<p:column ...>
...
</p:column>
</p:dataTable>
Exactly as demonstrated on their showcase site。换句话说,你的陈述
虽然我复制了展示中显示的相同示例
实际上是不正确的。
【讨论】:
是的,你是对的@BalusC !!!我真的开始注意力不集中了!!再次感谢你!以上是关于<p:ajax> 无法将 <p:ajax> 附加到非 ClientBehaviorHolder 父级的主要内容,如果未能解决你的问题,请参考以下文章
在 <p:ajax event="cellEdit"> 完成时更新整个 <p:dataTable>
来自 p:ajax 中的侦听器的 InputText 值传递 null 而不是 value
Primefaces valueChangeListener 或 <p:ajax 侦听器未触发 p:selectOneMenu [重复]