我需要訪問managedBean中org.primefaces.model.diagram.Element的數據對象,只需單擊此元素即可。我正在使用primefaces 5.2。 我嘗試了多種方法來確定這一點,但目前爲止沒有任何工作。下面是一個方法:圖表元素中的JSF/primefaces事件
XHTML:
的想法是,通過一個commandLink action屬性(其爲例如數據表正常工作)的元素:
<fl:composition template="/WEB-INF/template.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:fl="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
<fl:define name="content">
<h:form id="form">
<p:diagram style="height:600px" value="#{flowDiagramBean.model}" var="el">
<f:facet name="element">
<p:commandLink actionListener="#{flowDiagramBean.onElementClicked}" update="@form" value="#{el.actionElementLabelText}">
<f:attribute name="element" value="#{el}"/>
</p:commandLink>
</f:facet>
</p:diagram>
</h:form>
</fl:define>
</fl:composition>
的inital積聚原型圖:
@PostConstruct
public void init() {
setModel(new DefaultDiagramModel());
getModel().setMaxConnections(-1);
getModel().getDefaultConnectionOverlays().add(new ArrowOverlay(20, 20, 1, 1));
FlowChartConnector connector = new FlowChartConnector();
connector.setPaintStyle("{strokeStyle:'#C7B097',lineWidth:3}");
getModel().setDefaultConnector(connector);
ScreenFlowItemObj screenFlowItemObj = new ScreenFlowItemObj();
screenFlowItemObj.setActionElementLabelText("test");
Element start = new Element(screenFlowItemObj, "20em", "6em");
start.addEndPoint(new BlankEndPoint(EndPointAnchor.BOTTOM));
start.addEndPoint(new BlankEndPoint(EndPointAnchor.LEFT));
Element trouble = new Element(screenFlowItemObj, "20em", "18em");
trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.TOP));
trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.BOTTOM));
trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.RIGHT));
model.addElement(start);
model.addElement(trouble);
}
正如您所看到的,ScreenFlowItemObj類型是每個元素的傳遞數據對象。
的ActionListener的是這樣的:
public void onElementClicked(ActionEvent event) {
ScreenFlowItemObj screenFlowItemObj = (ScreenFlowItemObj) event.getComponent().getAttributes().get("element");
}
不幸的是在commandLink屬性「元素」的點擊不會被付諸屬性映射,所以在聽者screenFlowItemObj解析爲空。難道我做錯了什麼?可能有另一種方法來實現這一點?
我在JSF 2.2的1.7 tomee上使用primefaces 5.2。
謝謝
貢納爾
什麼,如果你不使用模板(創建[MCVE]) – Kukeltje
不更新你這樣的問題。創建新的問題。也請不要像這樣「回答」它。你可以提出一個編輯我的答案,所以我們可以在那裏添加它。請回滾「更新」 – Kukeltje
好吧,我會這樣做。 – GunnarB