코딩 한 JSF ViewHandlerWrapper에 약간의 문제가 있습니다. 대부분의 경우 잘 동작하지만 때때로 Mojarra의 핵심에서 NullPointerException을 얻고 따라서 ViewHandlerWrapper를 올바르게 구현했는지 궁금해하기 시작했습니다. 코드에서 JSF ViewHandlerWrapper로 인해 NullPointerException이 발생합니다.
public class TokenViewHandler extends ViewHandlerWrapper {
private ViewHandler parent;
public TokenViewHandler(ViewHandler parent) {
this.parent = parent;
}
@Override
public ViewHandler getWrapped() {
return parent;
}
@Override
public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException {
final String token = UUID.randomUUID().toString();
findAndModifyForms(viewToRender, token, context);
getWrapped().renderView(context, viewToRender);
}
private void findAndModifyForms(final UIComponent component, final String token, final FacesContext ctx) {
if (component instanceof UIForm) {
final HtmlInputHidden hidden = (HtmlInputHidden) ctx.getApplication().createComponent(HtmlInputHidden.COMPONENT_TYPE);
hidden.setValue(token);
component.getChildren().add(hidden);
} else {
for (UIComponent tempComponent : component.getChildren()) {
findAndModifyForms(tempComponent, token, ctx);
}
}
}
}
당신은 신속하게 내가보기에 각
형태에 UUID 값으로
inputHidden -component을 추가 할 것을 알고 있습니다.
ViewHandlerWrappers에 대한 좋은 예제를 찾지 못했지만 ExceptionHandlerWrapper처럼 보일 것이라고 생각했지만 ViewHandler를 사용하여 비정기 NPE를 얻었으므로 뭔가 잘못되었다고 생각하고 볼 수 없습니다. .
NPE를 일으키는 라인은 무엇입니까? –
내 코드의 행이 없습니다. 그것은 Mojarra 자체에 있으며, 정확하게 지적하기가 어렵습니다. 나는 java.lang.NullPointerException이 얻을 : 널 (null) \t com.sun.faces.application.view.StateManagementStrategyImpl $ 4.invokeContextCallback (StateManagementStrategyImpl.java:289) ~ [glassfish.jsf_1.0.0.0_2-0-2.jar에서 : 2.0.2-FCS] \t (javax.faces.component.UIComponent.invokeOnComponent (UIComponent.java:1253) ~ [javax.jsf_1.0.0.0_2-0.jar : 2.0.2-FCS] – SiCN
) NPE는 다음보기가 Action, 즉 commandLink -> Action -> 결과와 같은 경우에 항상 occours됩니다. 그러나보기가 직접 호출되면 작동합니다. 이상한 물건 :) Mojarra 소스도 확인했는데 프레임 워크가 이전에 추가하지 않으면 새로운 구성 요소를 인식하지 못하는 것 같습니다. 문제는 이전에 수명주기에 빠져 있다면 viewRoot에 다른 구성 요소가 아직 추가되지 않았기 때문에 본질적으로 막혔습니다. – SiCN