2015-04-15 2 views
-1

Я пытаюсь использовать перетаскивание праймеров на UIComponent, но DragDropEvent возвращает NullPointerException. Что я, вероятно, делаю неправильно.Primefaces DragDropEvent на JSF UIComponent возвращает java.lang.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> 

StackTrace

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 перетаскивать доктор op. On-drop, я хочу, чтобы inputTextArea отображался. Пожалуйста, если есть лучший способ сделать это, я буду признателен. Благодарю.

ответ

2

Простой. onDrop ожидает клиент -защитный обратный вызов. Здесь вы можете использовать только функцию JavaScript. Размещение метода Bean здесь просто вызовет его (с неопределенным «событием», таким образом, null) так же, как если бы вы разместили #{dynaComponentController.onComponentDrop(event)} вне тега.

Возможно, вы вызовете метод bean-метода через p:remoteCommand и оберните этот вызов в функцию javascript, которую вы вызываете из onDrop.

+0

Thank. Пожалуйста, у вас есть рекомендации по последней части вопроса. (Display inputtextarea ondrop) –

+0

Хм, почему вы просто не справляетесь со всем событием на стороне клиента? Например. удалите атрибут «rendered» и добавьте «style =» display: none »и идентификатор. Затем просто сделайте что-то вроде 'onDrop = '$ (' # theid '). Css (' display ',' inline ');". –

Смежные вопросы