2016-04-03 5 views
0

Verwenden Sie ein DynamicViewPanel und eine Customizer-Bean, um die Spalte zu ändern, die eine Verknüpfung ist. Die Spalte, die die erste Spalte in der Ansicht ist, wird mithilfe der Methode setRendered() über die Bean ausgeblendet, und eine andere Spalte wird mit der Methode setDisplayAs ("link") zur Verknüpfung verwendet. Das funktioniert einwandfrei, aber das Ereignis oncolumnclick wird nie ausgelöst. Es scheint, dass das Ereignis an die ursprüngliche Spalte gebunden ist und nicht an die "neue" Verknüpfungsspalte.DynamicViewPanel ignoriert oncolumnclick wenn angepasst

Wie auch immer, um ein Ereignis an die "neue" Linkspalte zu binden? Ich muss eine Bereichsvariable festlegen, bevor ich zur neuen XPage navigiere.

Howard

Got dies etwas mit zu arbeiten, wie Maire vorgeschlagen.

Bei dem Verfahren public void afterCreateColumn (Faces Kontext, int index, ColumnDef COLDEF, IControl Spalte) {fügte ich diesen Code das Ereignis aus der Spalte zu bekommen war ich versteckt:

//Hide the first column in this view 
     if(dynamicColumn.getColumnName().equalsIgnoreCase("$2")){ 
      //dynamicColumn.setRendered(false); 
      dynamicColumn.setDisplayAs("hidden"); 
      String type = dynamicColumn.getChildren().get(0).getClass().toString(); 
      DebugToolbarBean.get().info("type is " + type); 
      event = (XspEventHandler) dynamicColumn.getChildren().get(0); 
     } 

I auch eine Ereignisvariable erstellt, dies zu halten:

com.ibm.xsp.component.xp.XspEventHandler event; 

Dann, wo ich die Spalte gemacht wollte ich einen Link sein, die ich hinzugefügt:

if (dynamicColumn.getColumnName().equalsIgnoreCase("OrderDate")){ 
      //make it a link 
      dynamicColumn.setDisplayAs("link"); 

      DebugToolbarBean.get().info("make OrderDate a link"); 
      if (event != null){ 
       dynamicColumn.getChildren().add(event); 
       DebugToolbarBean.get().info("adding event"); 
      } else { 
       DebugToolbarBean.get().info("event is null"); 
      } 

     } 
+1

Wenn XPages auf Sie seltsam wirkt, könnten Sie vielleicht ein clientseitiges onclick-Ereignis schreiben, das ein JSON-RPC aufruft. Der JSON-RPC kann dann die Bereichsvariable im Backend festlegen. –

+0

Das ist eine Möglichkeit, da ich CSJS zu der Spalte in der Customizebohne hinzufügen kann, aber das Problem wäre, den Wert für diese Zeile mit CSJS zu erhalten. Dieser Teil könnte schwierig sein ... – Howard

+1

Tricky aber möglich. Sie können den Wert über jQuery erfassen und an den JSON-RPC übergeben. –

Antwort

2

Ich habe das nicht versucht, aber Sie könnten versuchen, den Speicherort des xp: eventHandler in der Kontrollstruktur zu verschieben.

Wie in der Anfangs dynamisch generierte Steuerbaum ist wie:

xp:viewColumn id="column1" displayAs="link" 
    xp:eventHandler event="onclick" 
xp:viewColumn id="column2" displayAs="text" 

Und Ihr Code ändert es die displayAs Werten zu wechseln:

xp:viewColumn id="column1" displayAs="text" 
    xp:eventHandler event="onclick" 
xp:viewColumn id="column2" displayAs="link" 

aber die XP: Eventhandler würde immer noch hören für Klicks auf seine Vorgängerspalte1.

Sie konnten die Eventhandler in der customizerBean, wie so bewegen:

public void afterCreateColumns(FacesContext context, UIDynamicViewPanel panel) { 
    UIViewColumn col1 = (UIViewColumn) panel.getChildren().get(0); 
    UIViewColumn col2 = (UIViewColumn) panel.getChildren().get(1); 
    UIEventHandler eventHandler = (UIEventHandler) col1.getChildren().get(0); 
    // move the eventHandler to col2. 
    col2.getChildren().add(eventHandler); 
} 

[Der Code in extlib, der die Steuerbaumstruktur erstellt ist: com.ibm.xsp.extlib.component.dynamicview.DominoDynamicColumnBuilder .createColumn (...)]

+0

Maire, danke, nicht sicher, welche Klassen für die UIViewColumn und UIEventHandler zu importieren? Ich erhalte Ausnahme com.ibm.xsp.component.xp.XspEventHandler unvereinbar mit com.ibm.xsp.component.UIViewColumn Meine Importe waren: Import com.ibm.xsp.component.UIEventHandler; importieren Sie com.ibm.xsp.component.UIViewColumn; In der Customizeby habe ich bereits eine Methodensignatur mit dem Namen public void afterCreateColumn (FacesContext-Kontext, Int-Index, \t ColumnDef-Spalte, IControl-Spalte), mit der ich die Spalte verstecke und die andere Spalte als Verknüpfung einstelle. Würde ich beide nachCreateColumn verwenden? – Howard

+0

Maire, danke, habe die Klasse com.ibm.xsp.component.xp.XspEventHandler gefunden und diese und deinen Code verwendet. Siehe meinen Arbeitscode oben in meinen Fragenbearbeitungen. Howard – Howard