|
JSF: dataTable и h:commandButton
#33735899
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Есть таблица user'ов с колонками:
- id
- group
- Name
- Patrname
- Surname
- delete
В последней колонке напротив каждго user'а кнопка Delete, при нажатии на нее вызывается action метод OnDelete. После нажатия на кнопку происходит возврат на эту же страницу и теперь, если обновить страницу почему-то опять вызывется сам по себе метод OnDelete, в чем тут может быть проблема ???
Пробовал использовать actionListener те же приколы...
Вот исходник:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328.
<h:form>
<t:dataTable id="users_data"
align="center"
cellpadding="2"
cellspacing="1"
var="row"
value="#{selectUsers.data}"
preserveDataModel="false"
rows="10"
sortColumn="#{selectUsers.sort}"
sortAscending="#{selectUsers.ascending}"
preserveSort="true">
<t:columns id="selectusers_columns"
value="#{selectUsers.columnHeaders}"
var="columnHeader"
style="width:#{selectUsers.columnWidth}">
<f:facet name="header">
<t:commandSortHeader columnName="#{columnHeader.label}"
arrow="false"
immediate="false">
<f:facet name="ascending">
<t:graphicImage value="/images/ascending-arrow.gif"/>
</f:facet>
<f:facet name="descending">
<t:graphicImage value="/images/descending-arrow.gif"/>
</f:facet>
<h:outputText value="#{columnHeader.label}" />
</t:commandSortHeader>
</f:facet>
<h:outputText value="#{selectUsers.columnValue}"
rendered="#{selectUsers.columnTypeText}"/>
<h:commandButton value="#{selectUsers.columnValue}"
action="#{selectUsers.OnDelete}"
rendered="#{selectUsers.columnTypeButton}"/>
</t:columns>
</t:dataTable>
<h:panelGrid columns="1"
cellpadding="0"
cellspacing="0"
styleClass="scrollerTable">
<t:dataScroller id="dataScroller_users"
for ="users_data"
fastStep="5"
pageCountVar="pageCount"
pageIndexVar="pageIndex"
styleClass="dataScroller"
paginator="true"
paginatorMaxPages="5"
paginatorTableClass="paginator"
paginatorActiveColumnStyle="font-weight:bold;"
immediate="false">
<f:facet name="first" >
<t:graphicImage url="/images/arrow-first.png" border="0" />
</f:facet>
<f:facet name="last">
<t:graphicImage url="/images/arrow-last.png" border="0" />
</f:facet>
<f:facet name="previous">
<t:graphicImage url="/images/arrow-previous.png" border="0" />
</f:facet>
<f:facet name="next">
<t:graphicImage url="/images/arrow-next.png" border="0" />
</f:facet>
<f:facet name="fastforward">
<t:graphicImage url="/images/arrow-ff.png" border="0" />
</f:facet>
<f:facet name="fastrewind">
<t:graphicImage url="/images/arrow-fr.png" border="0" />
</f:facet>
</t:dataScroller>
</h:panelGrid>
</h:form>
// faces-coinfig.xml
...
<managed-bean>
<managed-bean-name>selectUsers</managed-bean-name>
<managed-bean- class >web.beans.users.SelectUsers</managed-bean- class >
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
...
// SelectUsers.java
package web.beans.users;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import services.TransponderFactory;
import services.fake.dto.UserDTO;
import settings.APBConstants;
import web.Utils;
import components.ColumnHeader;
import components.ColumnType;
import components.SortableList;
public class SelectUsers extends SortableList {
private static final long serialVersionUID = -5149074579408543934L;
private static final int SORT_ASCENDING = 1 ;
private static final int SORT_DESCENDING = - 1 ;
private boolean renderTable;
private Long delUserId = null ;
private UIData usersTable;
public SelectUsers() {
super ( null );
// Создание заголовка таблицы
List<ColumnHeader> headerList = new ArrayList<ColumnHeader>();
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userId", null ), "3%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userLogin", null ), "15%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userRole", null ), "10%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userName", null ), "16%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userPatrname", null ), "17%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_userSurname", null ), "17%"));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_delete", null ), "12%", ColumnType.BUTTON));
headerList.add( new ColumnHeader(Utils.getMessageResource(
"tableH_change", null ), "12%", ColumnType.LINK));
columnHeaders = new ListDataModel(headerList);
renderTable = true;
}
public String OnDelete() {
System.out.println("OnDelete method");
return "";
}
public void OnDeleteClick(ActionEvent event) {
System.out.println("OnDeleteAction");
//Object currow = usersTable.getRowData();
/*
if(delUserId!=null)
{
System.out.println("delUserId!=null");
// удаляем пользователя по его ID==delUserId
try {
TransponderFactory.DEFAULT.getUS().deleteUser(delUserId);
} catch (Exception e) {
Utils.ErrorMessage(APBConstants.BUNDLE_DELETEERROR,
new Object[] { Utils.getMessageResource(
APBConstants.BUNDLE_USERS, null),
e.getMessage() });
}
delUserId = null;
}
System.out.println("delUserId==null");
//return APBConstants.GO_SELECTUSERS;
*/
}
// ==========================================================================
// Getters & Setters
// ==========================================================================
public DataModel getData() {
if (data == null ) {
// Создаем список(строк) данных таблицы
List<Object> rowList = new ArrayList<Object>();
List<UserDTO> users = null ;
String usersMask = (String) Utils.getSessionVarAndClear(USERSMASK_VAR);
if (usersMask != null && !usersMask.equals("")) {
// выбираем пользователей по маске
try {
users = TransponderFactory. DEFAULT .getUS()
.selectUsersByLogin(usersMask);
} catch (Exception e) {
users = null ;
Utils.ErrorMessage(APBConstants.BUNDLE_SELECTERROR,
new Object[] { Utils.getMessageResource(
APBConstants.BUNDLE_USERS, null ),
e.getMessage()
});
}
} else {
// показываем всех пользователей
try {
users = TransponderFactory. DEFAULT .getUS().readUsers();
} catch (Exception e) {
users = null ;
Utils.ErrorMessage(APBConstants.BUNDLE_READERROR,
new Object[] { Utils.getMessageResource(
APBConstants.BUNDLE_USERS, null ),
e.getMessage() });
}
}
if (users!= null )
{
for (UserDTO user : users) {
List<Object> colList = new ArrayList<Object>();
colList.add(user.getId());
colList.add(user.getLogin());
colList.add(user.getRole());
colList.add(user.getName());
colList.add(user.getPatrname());
colList.add(user.getSurname());
colList.add(user.getId());
colList.add(user.getId());
rowList.add(colList);
}
}
else
{
renderTable = false;
}
data = new ListDataModel(rowList);
sort(getSort(), isAscending());
}
return data;
}
void setData(DataModel datamodel) {
System.out.println("----> preserved datamodel updated");
}
// ==========================================================================
// Protected Methods
// ==========================================================================
protected boolean isDefaultAscending(String sortColumn) {
return true;
}
protected void sort( final String column, final boolean ascending) {
if (column != null ) {
int columnIndex = getColumnIndex(column);
int direction = (ascending) ? SORT_ASCENDING : SORT_DESCENDING;
sort(columnIndex, direction);
}
}
protected void sort( final int columnIndex, final int direction) {
Comparator comparator = new Comparator() {
public int compare(Object o1, Object o2) {
int result = 0 ;
Object column1 = ((List) o1).get(columnIndex);
Object column2 = ((List) o2).get(columnIndex);
if (column1 == null && column2 != null )
result = - 1 ;
else if (column1 == null && column2 == null )
result = 0 ;
else if (column1 != null && column2 == null )
result = 1 ;
else
result = ((Comparable) column1).compareTo(column2) * direction;
return result;
}
};
Collections.sort((List) data.getWrappedData(), comparator);
}
// ==========================================================================
// Private Methods
// ==========================================================================
private int getColumnIndex( final String columnName) {
int columnIndex = - 1 ;
List headers = (List) columnHeaders.getWrappedData();
for ( int i = 0 ; i < headers.size() && columnIndex == - 1 ; i++) {
ColumnHeader header = (ColumnHeader) headers.get(i);
if (header.getLabel().equals(columnName)) {
columnIndex = i;
}
}
return columnIndex;
}
public boolean isRenderTable() {
return renderTable;
}
public void setRenderTable( boolean renderTable) {
this .renderTable = renderTable;
}
public Long getDelUserId() {
return delUserId;
}
public void setDelUserId( Long delUserId) {
this .delUserId = delUserId;
}
public UIData getUsersTable() {
return usersTable;
}
public void setUsersTable(UIData usersTable) {
this .usersTable = usersTable;
}
}
|
|
|