를 사용 HtmlCommandLink하는 매개 변수를 추가합니다. 달성하고자하는 모든 요소는 <h:link outcome="out">
은 <a href="out_url_parsed + ?param=paramvalue">
으로 렌더링됩니다. "param"은 내 구성 요소입니다.는, 프로그램 나는 dinamically 위상 리스너를 통해 <strong>HtmlCommandLink</strong> 구성 요소에 구성 요소 (<strong>UIParameter</strong>)를 추가 할 필요가 단계 리스너
나는이
private void addElement(final PhaseEvent event, final Class clazz, final UIComponent component) {
final FacesContext fcontext = event.getFacesContext();
UIViewRoot root = fcontext.getViewRoot();
if (root == null) {
return;
}
root.visitTree(new FullVisitContext(fcontext), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent target) {
if (clazz.isInstance(target)) {
LOGGER.info("Element Found");
UIParameter parameter = new UIParameter();
parameter.setValue("willberonadom");
parameter.setId("sessiontoken");
target.getChildren().add(parameter);
}
return VisitResult.ACCEPT;
}
});
}
를 사용하여 시도했다 그러나 그것은 작동하지 않습니다. 요소는 실제로 트리에서 발견되지만 UIParameter는 렌더링되지 않습니다.
나는 UIViewRoot가 RENDER_RESPONSE 단계 이후에 하위 요소 만 가질 수 있다는 것을 발견했습니다. 그래서 이것이 내가 추가 한 요소가 프로세스가 끝날 때 렌더링되지 않는 이유라고 생각합니다.
필자는 뷰를 편집하는이 param을 추가 할 수 있다고 확신하지만, 응용 프로그램의 모든 h : link에 있어야하고 다른 새로운 것도 추가해야하기 때문에이 작업을 수행하고 싶지 않습니다. 그래서 ... 태그
나는이 코드를보기에 모든 형태의 입력 숨겨진 요소를 추가 관리했습니다 유사한 경우에누락
HtmlInputHidden hiddenToken = new HtmlInputHidden();
hiddenToken.setId("sessiontoken");
hiddenToken.setValue("willberandom");
hiddenToken.setRendered(true);
root.addComponentResource(event.getFacesContext(), hiddenToken,"form");
을 방지하기 위해 더 나은 방법으로이 문제를 고려하지만, 아무튼 앵커 태그에 't 작업
감사합니다! 그것은 포인트 1과 3에서 작동했습니다. 저는 실제로 다른 요소로 디버깅을하고 있었기 때문에 HtmlCommandLink 타입의 또 다른 요소가 있었고 Id 대신에 이름을 설정하여 작업을 수행했습니다. 모든 것이 작동하기 때문에 나는 두 번째 요셉을 따라갈 것입니다. ') – Oscar
당신을 진심으로 환영합니다. – BalusC