p : p : dataTable 내부의 commandLink ajax 이벤트
<p:dataTable value="#{testBean.dummyStringData}" var="data">
<p:column>
<p:commandLink action="#{testBean.printData(data)}">
<h:outputLabel value="#{data}" />
</p:commandLink>
</p:column>
</p:dataTable>
간단한 백킹 빈 :
public class TestBean {
private List<String> dummyStringData = new ArrayList<String>();
//getters and setters omitted
@PostConstruct
public void postConstruct() {
dummyStringData.add(new String("DummyData1"));
dummyStringData.add(new String("DummyData2"));
dummyStringData.add(new String("DummyData3"));
}
public void printData (String data) {
System.out.println(data);
}
테이블 내의 링크를 클릭하면 예상 한대로 클릭 된 행의 내용이 stdout으로 인쇄됩니다 .
이제 사용자가 p : commandLink 위로 마우스 커서를 가져 가면 printData 메서드도 호출됩니다. 이를 달성하기 위해 p : ajax 요소를 p : commandLink 요소 안에 중첩 시키려고했습니다.
이 방법은 p에서는 작동하지 않습니다. commandLink 및 p : commandButton 구성 요소. 링크 위로 마우스를 가져 가면 아무 것도하지 않는 것 같습니다. 위의 두 가지 이외의 구성 요소 (예 : p : inputText 및 p : ajax를 위와 같이)를 사용하려면 예상되는 동작을 얻습니다.
x : x : xmx : onmouseover : p : remoteCommand 적절한 ajax 이벤트를 트리거 할 수 있습니다.<p:commandLink action="#{testBean.printData(data)}" onmouseover="rc()">
<h:outputLabel value="#{data}" />
</p:commandLink>
<p:remoteCommand name="rc" action="#{testBean.printData(data)}" />
그러나 데이터 변수는 다음과 같이 전달됩니다. printData 메서드에 대한 매개 변수는 이벤트가 트리거 된 행과 관련이 없습니다. 대신 컬렉션의 마지막 요소가 항상 사용됩니다 (이 경우 "DummyData3").
Tomcat 7이 설치된 MyFaces 2.1.3에서 Primefaces 3.0.M3을 사용하고 있습니다.
건배!
감사합니다. 작동합니다. 약간의 관련 문제 - **
** 및 **
*을 사용하여 ** ** 중첩 기능이 작동하지 않습니다 (또는 적어도 작동하지 못할 수도 있음). * 구성 요소? –
아마 AJAX가 내장되어있을 것입니다. 후드 아래에서 벌어지고있는 일은 이미'p : ajax' 컴포넌트가 포함되어 있다는 것입니다. 나는 그것을 시도하지 않았지만 아마도'ajax = "false"'를 설정하면'p : ajax'를 명시 적으로 포함시킬 수 있습니다. 내가 틀렸을 수도있다. 흠, 당신도 잘못 될 수 있습니다.'p : ajax'는이 컴포넌트들에서 작동하지 않습니다. 왜냐하면 내가 직접 시도해 보았다고 말할 수 없기 때문입니다. –