Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF 2.0 + Ajax не присваивается значение / 7 сообщений из 7, страница 1 из 1
15.04.2013, 13:50:50
    #38225853
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
Есть текстовое поле в которое передали данные, которые пользователь корректирует

Код: java
1.
2.
3.
4.
5.
6.
                        <h:outputText value="Табельный номер:"/>
                        <h:panelGroup>
                            <h:inputText id="tab" value="#{vugruzka.tab}" onblur="saveedit();" style="width: 80px; font-size: 1em;"/>
                            <!-- копируем значение в скрытую строку для Ajax и JavaScripts -->
                            <h:inputText id="tabhidden" value="" />
                        </h:panelGroup>



По нажатию на кнопку данные обновляются в таблице, без Ajaxa все работает с Ajax метод получает не измененные данные.
Код: java
1.
2.
3.
4.
                        <h:commandButton id="saveRow" class="findButton" value="Сохранить" actionListener="#{vugruzka.editingSave}"
                                         onclick="hideEdit();" style="color: #045491; width: 100px; margin-right: 10px;">
                            <f:ajax render=":form1:table1"/>
                        </h:commandButton> 



Метод

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    // сохраняем коректируемую запись
    public void editingSave(ActionEvent event) throws SQLException {


        // если используем Ajax то нужно самому присваивать значения в JavaScripts функция saveedit()
        UIInput tabs = (UIInput) FacesContext.getCurrentInstance().getViewRoot().findComponent("form1:tabhidden");
        String tab = tabs.getValue().toString().trim();

        // вносим изменения в выбранную строку
        sprfio.setNtab(tab);

        // сохнаняем изменения в базе данных
        wmysql.updateRow(sprfio);

    }



Добавил поле <h:inputText id="tabhidden" value="" /> в которое пробую копировать откорректированное значение, проверил дебагером и визуально на странице все отображается, значение присваивается но:

Код: java
1.
2.
        UIInput tabs = (UIInput) FacesContext.getCurrentInstance().getViewRoot().findComponent("form1:tabhidden");
        String tab = tabs.getValue().toString().trim();



Почему то возвращает "", значение по умолчанию заданное <h:inputText id="tabhidden" value="" /> ?
...
Рейтинг: 0 / 0
15.04.2013, 13:55:15
    #38225861
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
<h:inputText id="tabhidden" value="" />
заменить на <h:inputText id="tabhidden" value="#{yourBean.yourField}" />

в коде вместо

UIInput tabs = (UIInput) FacesContext.getCurrentInstance().getViewRoot().findComponent("form1:tabhidden");
String tab = tabs.getValue().toString().trim();

делать

String tab = getYourField();
...
Рейтинг: 0 / 0
15.04.2013, 14:22:41
    #38225919
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
Переделал так, но все равно
Код: java
1.
2.
3.
4.
5.
                        <h:panelGroup>
                            <h:inputText id="tab" value="#{vugruzka.tab}" onblur="saveedit();" style="width: 80px; font-size: 1em;"/>
                            <!-- копируем значение в скрытую строку для Ajax и JavaScripts -->
                            <h:inputText id="tabhidden" value="#{vugruzka.tab_new}" />
                        </h:panelGroup>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function saveedit() {

    debugger;
    var tab = $('#tab').val();
    $('#tabhidden').val(tab);
    // проверяем - все ок
    var tab = $('#tabhidden').val();
    
 }
;



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private String tab_new = "?";

...

    public void editingSave(ActionEvent event) throws SQLException {

        tab = getTab_new();

        // вносим изменения в выбранную строку
        sprfio.setNtab(tab);
 
        // сохнаняем изменения в базе данных
        wmysql.updateRow(sprfio);

    }



В итоге tab остается = "?", хотя визуально получил совсем другое значение
...
Рейтинг: 0 / 0
15.04.2013, 14:33:24
    #38225937
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
что-то мутно у вас все, приведи всю страницу.
Ну и попробуй вместо <f:ajax render=":form1:table1"/>
<f:ajax render=":form1"/>
...
Рейтинг: 0 / 0
15.04.2013, 14:56:17
    #38225979
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
Вот вся страница. То что нужно в самом конце. <f:ajax render=":form1"/> не помогло, но я и не хочу перерисовывать всю форму, для этого я и использую Ajax и JavaScript, но вот проблема в том что присвоенное через JavaScript функцию значение не передается в бин.

Код: java
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.
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:util="http://java.sun.com/jsf/composite/popagers">
    <!-- -->


    <h:head>
        <h:outputStylesheet library="css" name="css_table.css"/>
        <h:outputStylesheet library="css" name="po_pagers.css"/>
        <h:outputScript library="javascript" name="po_pagers.js"/>
        <h:outputScript library="javascript" name="editRows.js"/>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:debug/>
        <h:form id="form1" prependId="false">


            <!--верхние ссылки на поиск и удаление ...-->
            <div id="block"/>

            <p>
                <h:commandLink value="Поиск ..." onclick="showFind();" style="margin-left: 20px;">
                    <f:ajax/>
                </h:commandLink>

                <h:commandLink id="kolcheck" value="Удаление выбранных записей" style="margin-left: 20px;"
                               actionListener="#{vugruzka.delCheck}"/>
                <!--                    <f:ajax event="keyup"/>
                                </h:commandLink>   -->
            </p>

            <!--окно поиска-->
            <div id="finddiv" style="margin-left: 20px;">


                <h:commandButton image="#{resource['images:close.gif']}" onclick="hideFind();"
                                 style="margin-left: 93%; margin-top: 5px;">
                    <f:ajax/>
                </h:commandButton>


                <div id="findinform">
                    <p>
                        <h:outputText style="margin-left: 20px; font-weight : bold;" value="Поиск:"/> 
                    </p>

                    <h:inputText id="findtext" class="findtext" value="#{vugruzka.find_text}" style="width: 460px; margin-left: 20px;"/>

                    <h:commandButton class="findButton" value="Начать" actionListener="#{vugruzka.tofind}" onclick="hideFind();"/>
                    <!--                    <f:ajax event="keyup" render="@form"/>
                                    </h:commandButton>-->
                    <h:commandLink id="sbros" class="sbros" value="Сброс результатов поиска" actionListener="#{vugruzka.tofind}"
                                   style="margin-left: 20px;"/>

                    <h:selectOneRadio style="margin: 20px;" layout="pageDirection" value="#{vugruzka.findType}"
                                      required="true">
                        <f:selectItem itemValue="1" itemLabel="Поиск в свободном порядке"/>
                        <f:selectItem itemValue="2" itemLabel="Строгий поиск по началу строки"/>
                    </h:selectOneRadio>


                </div>

            </div>




            <!--для выравнивания таблицы и по страничного составного элемента поместим их в div-->
            <div id="centr_table">


                <h:dataTable id="table1" value="#{vugruzka.modelTable}" var="table" rows="30" 
                             captionClass="captionStyle" 
                             styleClass="tableStyle"
                             headerClass="headerStyle"
                             columnClasses="columnStyleCheck, columnStyleCheck, columnStyleLower, columnStyleLower, columnStyleLower, columnStyle"
                             rowClasses="evenRow, oddRow"
                             frame="border" rules="all">
                    <!--заголовок таблицы-->
                    <f:facet name="caption">Таблица SPR_FIO из базы данных MySql выведенно с помощью Hibernate.</f:facet> 

                    <!--по нажатию открывается окно корректировки записи-->
                    <h:column>
                        <h:commandButton image="#{resource['images:edit.gif']}" style="margin: 0; max-height:14px; max-width:25px;"
                                         actionListener="#{vugruzka.editingForm}" onclick="showEdit();" >
                            <f:ajax render=":form1:tab :form1:fio :form1:list"/>
                        </h:commandButton>    
                    </h:column>

                    <!--чекбокс заполняется из HashMap ключем которой является индекс строки-->
                    <h:column>
                        <h:selectBooleanCheckbox style="margin: 0;" value="#{vugruzka.checks[vugruzka.modelTable.getRowIndex()]}"
                                                 onchange="koldels(this);"/>
                    </h:column>                     

                    <!--нумерация строк-->
                    <h:column>
                        <f:facet name="header">№</f:facet> 
                            #{vugruzka.modelTable.rowIndex+1}
                    </h:column>

                    <h:column>
                        <!-- заголовок столбца 1-->
                        <f:facet name="header">Табельный номер</f:facet> 
                            #{table.ntab}
                    </h:column>

                    <h:column>
                        <f:facet name="header">Ф.И.О.</f:facet>
                            #{table.fio}
                    </h:column>

                    <h:column>
                        <f:facet name="header">Место работы</f:facet>                     
                            #{table.liststruct}
                    </h:column> 



                    <!--удаление строки вызываем метод delRow и посылаем kod_fio удаляемого сотрудника-->
                    <!--                    <h:column>
                                            <h:commandLink action="{vugruzka.delRow(table.id)}"> 
                                                <h:graphicImage name="delete.gif" library="images"/>
                                            </h:commandLink>
                                        </h:column>   -->

                </h:dataTable>


                <!-- Мой составной компонент постраничного вывода таблицы tableId="table1" -->
                <util:po_pagers formId="form1" tableId="table1" rows="30"/>



            </div>



            <!--окно редактирования записи-->
            <div id="editingdiv" style="margin-left: 20px;">


                <h:commandButton image="#{resource['images:close.gif']}" onclick="hideEdit();"
                                 style="margin-left: 94%; margin-top: 5px;">
                    <f:ajax/>
                </h:commandButton>


                <div id="editform">
                    <p>
                        <h:outputText style="margin-left: 20px; font-weight : bold;" value="Заполните необходимые данные:"/> 
                    </p>


                    <h:panelGrid columns="2" style="margin-left: 20px; font-size: 0.9em;">
                        <h:outputText value="Табельный номер:"/>
                        <h:panelGroup>
                            <h:inputText id="tab" value="#{vugruzka.tab}" onblur="saveedit();" style="width: 80px; font-size: 1em;"/>
                            <!-- копируем значение в скрытую строку для Ajax и JavaScripts -->
                            <h:inputHidden id="tabhidden" value="#{vugruzka.tab_new}" />
                        </h:panelGroup>

                        <h:outputText value="Фамилия Имя Отчество:"/>
                        <h:panelGroup>
                            <h:inputText id="fio" value="#{vugruzka.fio}" style="width: 500px; font-size: 1em;"/>
                            <!-- копируем значение в скрытую строку для Ajax и JavaScripts -->
                            <h:inputHidden id="fiohidden" value="" />
                        </h:panelGroup>

                        <h:outputText value="Место работы:"/>
                        <h:panelGroup>
                            <h:inputText id="list" value="#{vugruzka.liststr}" style="width: 500px; font-size: 1em;"/>
                            <!-- копируем значение в скрытую строку для Ajax и JavaScripts -->
                            <h:inputHidden id="listhidden" value="" />
                        </h:panelGroup>                        

                    </h:panelGrid>

                    <div style="text-align: center; margin-top: 20px;">
                        <h:commandButton id="saveRow" class="findButton" value="Сохранить" actionListener="#{vugruzka.editingSave}"
                                         onclick="hideEdit();" style="color: #045491; width: 100px; margin-right: 10px;">
                            <f:ajax render=":form1:table1"/>
                        </h:commandButton> 

                        <h:commandButton class="findButton" value="Отмена" style="color: #D20005; width: 100px;" onclick="hideEdit();">
                            <f:ajax/>   
                        </h:commandButton>
                    </div>
                </div>

            </div>            

        </h:form>

    </h:body>
</html>
...
Рейтинг: 0 / 0
15.04.2013, 15:57:57
    #38226115
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
Значение tabhidden само на сервер не уедет, надо указать в f:ajax
Код: html
1.
<f:ajax render=":form1:table1" execute="tabhidden"/>


В хелпе написано, что если ничего не указано, то на сервер отправляется "@this", то есть в данном случае - значение h:commandButton
...
Рейтинг: 0 / 0
15.04.2013, 16:09:02
    #38226140
Alex-ZZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF 2.0 + Ajax не присваивается значение
Точно, спасибо заработало.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF 2.0 + Ajax не присваивается значение / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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