powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: dataTable и h:commandButton
3 сообщений из 3, страница 1 из 1
JSF: dataTable и h:commandButton
    #33735899
DmitriyS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица user'ов с колонками:
- id
- group
- Name
- Patrname
- Surname
- delete

В последней колонке напротив каждго user'а кнопка Delete, при нажатии на нее вызывается action метод OnDelete. После нажатия на кнопку происходит возврат на эту же страницу и теперь, если обновить страницу почему-то опять вызывется сам по себе метод OnDelete, в чем тут может быть проблема ???
Пробовал использовать actionListener те же приколы...

Вот исходник:

Код: plaintext
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;
	}

}


...
Рейтинг: 0 / 0
JSF: dataTable и h:commandButton
    #33736166
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо после обработки сделать редирект.
что-то вроде response.sendRedirect("mypage.jsp");
...
Рейтинг: 0 / 0
JSF: dataTable и h:commandButton
    #33736344
DmitriyS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал прописать явно куда переходить после обработки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public  String OnDelete() {
    System.out.println("OnDelete method");
     return  "go_selectusers"; 
}

// faces-config.xml
...
<navigation-rule>
  <from-view-id>*</from-view-id>
  <navigation- case >
      <from-outcome>go_selectusers</from-outcome>
      <to-view-id>/pages/admin/selectusers.jsp</to-view-id>
  </navigation- case >
</navigation-rule>
...


Но это не помогло.

А чем будет отличаться response.sendRedirect(...) от того что написано выше?

К тому же пробовал вызывать response.sendRedirect в OnDelete() но вылетает exception:

Код: plaintext
1.
2.
3.
4.
5.
javax.servlet.ServletException: Cannot forward after response has been committed
javax.faces.webapp.FacesServlet.service(FacesServlet.java: 121 )
ua.cn.dialok.apbweb.web.filter.AuthorizationFilter.doFilter(AuthorizationFilter.java: 122 )
ua.cn.dialok.apbweb.web.filter.AuthorizationFilter.doFilter(AuthorizationFilter.java: 122 )
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java: 122 )

Т.е. с sendRedirect наверно трабла в том что не в той фазе вызывается...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: dataTable и h:commandButton
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]