내 목표 : 나는 commandLink를 PrimeFaces의 자식으로 추가하려고합니다. p:timeline
사용자는 해당 링크 중 하나를 클릭 할 수 있어야합니다. 클릭은 내 bean (CDI, ViewScoped)에서 메소드를 호출해야한다. 액션 메소드에서 타임 라인의 클릭 된 항목에 대한 정보가 필요합니다. 액션 메소드의 결과에 따라 다른 UI로 탐색 할 수 있습니다.p : timeline의 자식에서 전달 된 매개 변수는 액션 메소드에서 null입니다.
내 시도 : 전체 양식은 매우 짧고 간단합니다. 그래서 나는 더 나은 완전히 게시 : 하나는 XHTML에서 볼 수 있듯이, 내가 타임 라인 항목에 대한 몇 가지 "ID"를 표시하고 :
<h:form>
<p:fieldset legend="Upcoming Gates">
<p:timeline height="200px" style="width: 99%;"
start="#{facilitatorCockpit.timelineStart}"
end="#{facilitatorCockpit.timelineEnd}"
value="#{facilitatorCockpit.timelineModel}"
var="timelineitem"
selectable="false"
zoomable="false"
moveable="false"
>
<h:outputText value="#{timelineitem.systemElement}"/> <br/>
<p:commandLink action="#{facilitatorCockpit.openStatusSheet(timelineitem.roadmapId)}"
process="@this" value="#{timelineitem.roadmapId}"
title="Open Status Sheet"/>
</p:timeline>
</p:fieldset>
</h:form>
현재 행동. 이 ID는 UI에 올바르게 표시됩니다. 조치 메소드가 실행되지만 전달 된 매개 변수는 서버 측에서 null
으로 해석됩니다.
데이터 테이블 내부에서 동일한 시도 (동일한 UI, 다른 양식)를 사용하고 있습니다. 정상적으로 작동합니다. 나는 내부에서 이것과 같은 매개 변수로 액션 메소드를 호출 할 수 없다. p:timeline
내 페이지에는 중첩 된 양식이 없으며 브라우저 콘솔에는 JavaScript 오류가 없다. 나는 commandLink/button과 action/listener의 모든 조합을 시도했다. 비록 예제에서 사용 된 것이 excatly 내가 원하는 것이지만, 같은 결과를 얻었지만.
내가 PF 6.0 인 Mojarra를 사용하고 2.2.10
업데이트 : 나는 CommandLink는, 예를 들어 이런 종류를 사용하고 때 생성 된 HTML로 생성 된 HTML의 일부 slighty를 차이를 발견 데이터 테이블에서. p:timeline
매우 동일한 식별자와 자바 스크립트 호출에서
모든 단일 타임 라인 항목에 대해 생성됩니다
<a id="j_idt88:j_idt94" href="#" class="ui-commandlink ui-widget"
aria-label="Open Status Sheet"
onclick="PrimeFaces.ab({s:"j_idt88:j_idt94",p:"j_idt88:j_idt94"});
return false;"
title="Open Status Sheet">FPR 137
</a>
<!-- .... -->
<a id="j_idt88:j_idt94" href="#" class="ui-commandlink ui-widget"
aria-label="Open Status Sheet"
onclick="PrimeFaces.ab({s:"j_idt88:j_idt94",p:"j_idt88:j_idt94"});
return false;"
title="Open Status Sheet">FPR 138
현재 솔루션 : 내 현재의 접근 방식은 지금과 같은 허용 대답을 바탕으로 :
<p:commandLink action="#{facilitatorCockpit.openStatusSheetFromTimeline()}"
process="@this"
value="#{timelineitem.phase.label}"
title="Open Status Sheet"
>
<f:param name="id" value="#{timelineitem.roadmapId}" />
</p:commandLink>
나는 additio 원래의 메소드에 위임 한 backing bean에 대한 액션 메소드.
public String openStatusSheetFromTimeline() {
Map<String, String> params = FacesContext.getCurrentInstance()
.getExternalContext()
.getRequestParameterMap();
String roadmapId = params.get("id");
Long id = Long.parseLong(roadmapId);
return openStatusSheet(id);
}
아직도 나는 inital 접근법에있어 잘못된 점을 알고 있습니다.
tyvm. 현재 상황에 대한 타협이 될 수 있습니다. 그러나 몇 가지 문제가 있습니다. 요점은 단일 타임 라인 이벤트에 둘 이상의 명령 링크가 추가되어야하는 UI의 변경을 기대한다는 것입니다. 타임 라인의 select 이벤트를 사용하면이 옵션이 사라집니다. – stg
맞습니다. 이 사용 사례에 대한 두 번째 솔루션을 추가했습니다. – jklee
f : param으로 매개 변수를 전달하면 트릭을 수행했습니다! 그래도 내 질문에 초기 접근 방식으로 작동하지 않는 이유는 모르겠다. – stg