2014-01-09 23 views
2

我正在创建动态标签并将其设置为顶部和左侧属性, 和我通过拖放jquery动态修改顶部和左侧属性,但是当我尝试从标签中检索这些顶部和左侧属性时原始属性的标签,我希望新的属性在我的Java代码中工作。使用jQuery和Java代码修改的标签属性不保存它。在ZK

对不起,这里是我的代码 main.zul - Jquery的部分

<script> 
function dragEvent(label, section){ 
    var txtNom = jq('$txtNom'); 
    var txtX = jq('$txtX'); 
    var txtY = jq('$txtY'); 
    var txtW = jq('$txtWidth'); 
    var txtH = jq('$txtHeight'); 


    label.draggable({ 
     start: function() 
     { 

     }, 
     drag: function(e,u) 
     { 
      txtNom.val(label.text()); 
      txtX.val(label.offset().left-section.offset().left); 
      txtY.val(label.offset().top-section.offset().top); 
      txtW.val(label.width()); 
      txtH.val(label.height()); 
     }, 
     stop: function(e,u) 
     { 
      txtNom.val(label.text()); 
      txtX.val(label.offset().left-section.offset().left); 
      txtY.val(label.offset().top-section.offset().top); 
      txtW.val(label.width()); 
      txtH.val(label.height()); 
     } 
    }); 

    } 

    function bindEventLabel(lblId,trSeccion) 
    { 
     var label = jq('$'+lblId+''); 
     var section = jq('$'+trSeccion+''); 
     dragEvent(label,section); 
    } 

Main.java

@Listen("onClick = #btnGenRep") 
public void onGenerateReport() 
{ 
    String file = "C:\\Users\\hgarza\\Desktop\\Reportes\\reporte.jrxml"; 
    File src = new File(file); 
    JasperDesign desgin = null; 
    try { 
     desgin = (JasperDesign) JRXmlLoader.load(src); 
    } catch (JRException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Grid gridtemp = null; 
    for(Component comp : dEBody.getChildren()) 
    { 
     if(comp instanceof Grid) 
     { 
      gridtemp = (Grid) comp; 
      break; 
     } 
    } 


    for(Component rowss : gridtemp.getChildren()) 
    { 
     if(rowss instanceof Rows) 
      { 
      Rows rowsTemp = (Rows)rowss; 
       for(Component roww : rowsTemp.getChildren()) 
       { 
       if(roww instanceof Row){ 
         Row rowTemp = (Row)roww; 
       for(Component labell : rowTemp.getChildren()) 
       { 
       Label lbl = labell instanceof Label ? (Label) labell : null; 
       System.out.println(lbl.getValue()); 
       if(lbl.getId().equals("sTitulo")) 
        { 
         JRDesignStaticText lTitle = (JRDesignStaticText)desgin.getTitle().getElementByKey("sTitulo"); 
         lTitle.setX(new Integer(lbl.getLeft().split("px")[0])); 
         lTitle.setY(new Integer(lbl.getTop().split("px")[0])); 
        } 

       if(lbl.getId().equals("sSubtitulo")) 
        { 
        JRDesignStaticText lSubTitle = (JRDesignStaticText)desgin.getPageHeader().getElementByKey("sSubtitulo"); 
         lSubTitle.setX(new Integer(lbl.getLeft().split("px")[0])); 
         lSubTitle.setY(new Integer(lbl.getTop().split("px")[0])); 
        } 

       if(lbl.getId().equals("sDetalles")) 
        { 
        JRDesignStaticText lDetalle = (JRDesignStaticText)desgin.getColumnHeader().getElementByKey("sDetalles"); 
         lDetalle.setX(new Integer(lbl.getLeft().split("px")[0])); 
         lDetalle.setY(new Integer(lbl.getTop().split("px")[0])); 
        } 

       if(lbl.getId().equals("pNombre")) 
        { 
         JRBand detail = desgin.getDetailSection().getBands()[0]; 
         JRDesignTextField param = (JRDesignTextField) detail.getElementByKey("pNombre"); 
         param.setX(new Integer(lbl.getLeft().split("px")[0])); 
         param.setY(new Integer(lbl.getTop().split("px")[0])); 

        } 
       } 
       } 
      } 
     } 
    } 

我读,我有更新从客户端的性能,但我不知道怎么做

+0

请提供重现问题的代码示例。 –

回答

0

问题是你改变v在客户端(浏览器)端,并且你不会发送通知给服务器端,有什么改变。在第一次,虽然我会做如下:

变化JS和添加通知

stop: function(e,u) 
{ 
    txtNom.val(label.text()); 
    txtX.val(label.offset().left-section.offset().left); 
    txtY.val(label.offset().top-section.offset().top); 
    txtW.val(label.width()); 
    txtH.val(label.height()); 
    <!-- ADDED --> 
    var message = "X:" + label.offset().left-section.offset().left + ";Y:label.offset().top-section.offset().top"; 
    zAu.send(new zk.Event(zk.Widget.$('$myLableID'), "onCoordinateChange", {'' : message}, {toServer:true})); 
} 

设置标签如下

<label id="myLableID" onCoordinateChange="@command('doChangeLabel', v=event.data)" value="Movable label"/> 

,并在视图模型添加

@Command 
public void doChangeLabel(@BindingParam("v") String value) { 
    // parse your message received from JS (X:213213;Y:23423423) 
} 

而且这应该工作