1 33 34 package com.icesoft.faces.component.ext.renderkit; 35 36 import com.icesoft.faces.component.ext.HtmlDataTable; 37 import com.icesoft.faces.component.ext.RowSelector; 38 import com.icesoft.faces.component.ext.RowSelectorEvent; 39 import com.icesoft.faces.context.DOMContext; 40 import com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer; 41 import com.icesoft.faces.renderkit.dom_html_basic.HTML; 42 import org.w3c.dom.Element ; 43 44 import javax.faces.component.UIComponent; 45 import javax.faces.context.FacesContext; 46 import javax.faces.event.PhaseId; 47 import java.io.IOException ; 48 import java.util.StringTokenizer ; 49 50 54 public class RowSelectorRenderer extends DomBasicRenderer { 55 56 public void decode(FacesContext facesContext, UIComponent uiComponent) { 58 60 HtmlDataTable dataTable = getParentDataTable(uiComponent); 62 63 String dataTableId = dataTable.getClientId(facesContext); 64 String selectedRowsParameter = 65 TableRenderer.getSelectedRowParameterName(dataTableId); 66 String selectedRows = (String ) facesContext.getExternalContext() 67 .getRequestParameterMap().get(selectedRowsParameter); 68 69 70 if (selectedRows == null || selectedRows.trim().length() == 0) { 71 selectedRows = (String )facesContext.getExternalContext().getRequestMap().get(RowSelectorRenderer.class.getName()); 72 if(selectedRows == null || selectedRows.trim().length() == 0) 73 return; 74 }else{ 75 facesContext.getExternalContext().getRequestMap().put(RowSelectorRenderer.class.getName(), selectedRows); 77 } 78 int rowIndex = dataTable.getRowIndex(); 80 StringTokenizer st = new StringTokenizer (selectedRows, ","); 81 boolean rowClicked = false; 82 while (st.hasMoreTokens()) { 83 int row = Integer.parseInt(st.nextToken()); 84 if (row == rowIndex) { 85 rowClicked = true; 86 break; 87 } 88 } 89 RowSelector rowSelector = (RowSelector) uiComponent; 90 91 try { 92 if (rowClicked) { 93 boolean b = rowSelector.getValue().booleanValue(); 95 b = !b; 96 rowSelector.setValue(new Boolean (b)); 97 98 if (rowSelector.getSelectionListener() != null) { 99 RowSelectorEvent evt = 100 new RowSelectorEvent(rowSelector, rowIndex, b); 101 evt.setPhaseId(PhaseId.APPLY_REQUEST_VALUES); 102 103 rowSelector.queueEvent(evt); 104 } 105 106 } else { 107 if (Boolean.FALSE.equals(rowSelector.getMultiple())) { 108 rowSelector.setValue(Boolean.FALSE); 110 } 111 } 112 } catch (Exception e) { 113 e.printStackTrace(); 114 } 115 } 116 117 118 119 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) 120 throws IOException { 121 122 124 } 126 127 public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) 128 throws IOException { 129 } 133 134 private static HtmlDataTable getParentDataTable(UIComponent uiComponenent) { 135 UIComponent parentComp = uiComponenent.getParent(); 136 if (parentComp == null) { 137 throw new RuntimeException ( 138 "RowSelectorRenderer: decode. Could not find an Ice:dataTable as a parent componenent"); 139 } 140 if (parentComp instanceof com.icesoft.faces.component.ext.HtmlDataTable) { 141 return (HtmlDataTable) parentComp; 142 } 143 return getParentDataTable(parentComp); 144 } 145 146 } 147 | Popular Tags |