【问题标题】:Primefaces DragDropEvent on JSF UIComponent returns java.lang.NullPointerException [duplicate]JSF UIComponent 上的 Primefaces DragDropEvent 返回 java.lang.NullPointerException [重复]
【发布时间】:2015-04-15 14:55:36
【问题描述】:

我正在尝试在 UIComponent 上使用 primefaces 拖放,但 DragDropEvent 返回 NullPointerException。我可能做错了什么。

@Named(value = "dynaComponentController")
@RequestScoped

公共类 DynaComponentController {

private UIComponent component = new HtmlPanelGroup();
private boolean checker = false;


public void onComponentDrop(DragDropEvent event) {
    component = event.getComponent();
    int i = component.getChildCount();
    if(i > 0){
        checker = true;
    }
}

我的观点是

<h:form prependId="false">
        <h:panelGroup id="drop" layout="block" style="height:150px; width:300px;" styleClass="ui-widget-content">
            <p> Drop Here </p>
            <p:droppable for="drop" onDrop="#{dynaComponentController.onComponentDrop(event)}"/>
        </h:panelGroup>

        <br />

        <h:panelGroup id="drag" layout="block" style="height:150px;width:300px;" binding="#{dynaComponentController.component}">
            <h:outputLabel value="Drag Me" rendered="#{dynaComponentController.checker == false}"/>
            <h:panelGroup rendered="#{dynaComponentController.checker == true}">
                <h:inputTextarea id="complainID" />
            </h:panelGroup>
            <p:draggable for="drag"/>
        </h:panelGroup>

堆栈跟踪

java.lang.NullPointerException

at org.morph.bean.DynaComponentController.onComponentDrop(DynaComponentController.java:38)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at javax.el.ELUtil.invokeMethod(ELUtil.java:308)

at javax.el.BeanELResolver.invoke(BeanELResolver.ja

请考虑使用 primefaces 拖放功能将面板拖到另一个面板上。在放置时,我希望显示 inputTextArea。 请如果有更好的方法来解决这个问题,我将不胜感激。谢谢。

【问题讨论】:

    标签: jsf-2 primefaces managed-bean uicomponents


    【解决方案1】:

    简单。 onDrop 需要 客户端 端回调。您只能在此处使用 JavaScript 函数。在这里放置一个 Bean 方法只会调用它(使用未定义的“事件”,因此 null)就像您将 #{dynaComponentController.onComponentDrop(event)} 放置在标签之外一样。

    您可以考虑通过p:remoteCommand 调用一个bean 方法,并将该调用包装在您从onDrop 调用的javascript 函数中。

    【讨论】:

    • 谢谢。请问您对问题的后半部分有什么建议吗?(display inputtextarea ondrop)
    • 嗯,你为什么不完全在客户端处理事件呢?例如。删除 rendered 属性并添加 style="display:none" 和 id 代替。然后就做类似onDrop="$('#theid').css('display','inline');" 的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2012-07-21
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多