Кнопка PrimeFaces на вкладке не перемещается - PullRequest
0 голосов
/ 27 января 2011

Я разрабатываю этот проект с использованием JSF 2.0, NetBeans 6.9.1, GlassFish 3.1, Mojarra 2.0.3 и PrimeFaces 2.2-RC2.

Мой вопрос похож на этот вопрос , но хотя мне удалось заставить одну из моих кнопок работать, другая - нет.Вот моя ситуация: у меня есть dataTable со столбцом, содержащим две ссылки, одну для редактирования данных строки, одну для просмотра данных строки.При нажатии на ссылку «Редактировать» или «Просмотр» вы переходите на страницу сведений с <h:panelGrid> компонентами внутри <p:tabView> компонентов.Моя страница сведений содержит два компонента <p:tabView>, один для редактирования, другой для просмотра данных.Какой из них вы видите, зависит от <c:if> утверждений.Кнопка в первой <p:tabView> на странице (под этим я подразумеваю сначала прохождение сверху вниз) работает так, как мне бы этого хотелось, это компонент «Редактировать».Кнопка в другом <p:tabView> не работает.Я установил точки останова и прошел через отладчик, вторая кнопка, похоже, не запускает ActionEvent независимо от того, что я пытаюсь.Вот мой код для страницы:

            <ui:define name="metadata">
                <f:metadata>
                    <f:viewParam name="id" value="#{userDetailBean.selectedUserId}" />
                    <f:viewParam name="action" value="#{userDetailBean.view}" />
                </f:metadata>


            </ui:define>


            <ui:define name="main_base_content_top">
                <h:form>
                    <p:toolbar>
                        <p:toolbarGroup align="left">
                            <h:commandButton value="Return to User List" action="user_grid" />
                        </p:toolbarGroup>
                    </p:toolbar>
                </h:form>
            </ui:define>

            <ui:define name="main_base_content">

                    <c:if test="#{empty userDetailBean.view}">
                        <h:form>
                        <table align="center">
                            <tr>
                                <td>
                                    <p:tabView>
                                        <p:tab title="#{msgs.UserDetailTabTitle}">
                                            <h:panelGrid columns="4">
                                                <h:outputLabel value="#{msgs.UserDetailFirstName}" for="fname" />
                                                <h:inputText id="fname" value="#{userDetailBean.firstName}" />
                                                <h:outputLabel value="#{msgs.UserDetailJobTitle}" for="jtitle" />
                                                <h:inputText id="jtitle" value="#{userDetailBean.jobTitle}" />
                                                <h:outputLabel value="#{msgs.UserDetailLastName}" for="lname" />
                                                <h:inputText id="lname" value="#{userDetailBean.lastName}" />
                                                <h:outputLabel value="#{msgs.UserDetailEmployeeId}" for="empid" />
                                                <h:inputText id="empid" value="#{userDetailBean.id}" />
                                                <h:outputLabel value="#{msgs.UserDetailDateOfHire}" for="doh" />
                                                <h:inputText id="doh" value="#{userDetailBean.DOH}" />
                                                <h:outputLabel value="#{msgs.UserDetailLocation}" for="location" />
                                                <h:inputText id="location" value="#{userDetailBean.location}" />
                                                <h:outputLabel value="#{msgs.UserDetailStatus}" for="status" />
                                                <h:inputText id="status" value="#{userDetailBean.status}" />
                                                <h:inputHidden /> <h:inputHidden /> <h:inputHidden /> <h:inputHidden /> <h:inputHidden />
                                                &nbsp;
                                                <h:outputLabel value="#{msgs.UserDetailComments}" for="comments" />
                                                <h:inputTextarea id="comments" value="#{userDetailBean.comments}" />
                                                <h:inputHidden />
                                                <p:commandButton ajax="false" action="#{userDetailBean.submitChanges()}" value="Submit Changes" />
                                            </h:panelGrid>
                                        </p:tab>
                                    </p:tabView>
                                </td>
                            </tr>

                        </table>
                        </h:form>
                    </c:if>
                    <c:if test="#{! empty userDetailBean.view}">
                        <h:form>
                        <table align="center">
                            <tr>
                                <td>
                                    <p:tabView>
                                        <p:tab title="#{msgs.UserDetailViewTabTitle}">
                                            <h:panelGrid columns="4">
                                                <h:outputLabel value="#{msgs.UserDetailFirstName}" for="fname" />
                                                <h:outputText id="fname" value="#{userGridBean.selectedUser.firstName}" />
                                                <h:outputLabel value="#{msgs.UserDetailJobTitle}" for="jtitle" />
                                                <h:outputText id="jtitle" value="#{userGridBean.selectedUser.jobTitle}" />
                                                <h:outputLabel value="#{msgs.UserDetailLastName}" for="lname" />
                                                <h:outputText id="lname" value="#{userGridBean.selectedUser.lastName}" />
                                                <h:outputLabel value="#{msgs.UserDetailEmployeeId}" for="empid" />
                                                <h:outputText id="empid" value="#{userGridBean.selectedUser.id}" />
                                                <h:outputLabel value="#{msgs.UserDetailDateOfHire}" for="doh" />
                                                <h:outputText id="doh" value="#{userGridBean.selectedUser.DOH}" />
                                                <h:outputLabel value="#{msgs.UserDetailLocation}" for="location" />
                                                <h:outputText id="location" value="#{userGridBean.selectedUser.location}" />
                                                <h:outputLabel value="#{msgs.UserDetailStatus}" for="status" />
                                                <h:outputText id="status" value="#{userGridBean.selectedUser.status}" />
                                                <h:inputHidden /> <h:inputHidden /> <h:inputHidden /> <h:inputHidden /> <h:inputHidden />
                                                &nbsp;
                                                <h:outputLabel value="#{msgs.UserDetailComments}" for="comments" />
                                                <h:outputText id="comments" value="#{userGridBean.selectedUser.comments}" />
                                                <h:inputHidden /> <h:inputHidden /> <h:inputHidden />
                                                <p:commandButton onclick="submit()" ajax="false" action="#{userDetailBean.navigation()}" value="Retur to User Grid" />
                                            </h:panelGrid>
                                        </p:tab>
                                    </p:tabView>
                                </td>
                            </tr>
                        </table>
                        </h:form>
                    </c:if>                 

            </ui:define>
        </ui:composition>        
    </body>

Я перепробовал все, что мог придумать для второй кнопки: ajax = "false";OnClick = "отправить ()";ajax = "false" onclick = "submit";Я пробовал неявную навигацию с перенаправлением, а также правило навигации с перенаправлением.Методы действия userDetailBean.submitChanges () и userDetailBean.navigate () оба возвращают одну и ту же строку, которая соответствует правилу навигации в моем файлеface-config.Метод submitChanges вызывается, а мой метод навигации - нет.На данный момент я не заполняю поля данными, я просто пытаюсь заставить работать базовую навигацию.Почему моя команда commandButton на второй вкладке ViewView не работает?

1 Ответ

2 голосов
/ 27 января 2011

Другая причина того, что командная кнопка не была вызвана, заключается в том, что атрибут rendered кнопки или одного из ее родителей оценивается false на этапе применения значений запроса формы отправки.

У вас фактически нет ни одного, но эти <c:if> теги делают то же самое, только во время построения представления вместо времени визуализации представления. Параметры вида не применяются при построении вида, а только после этого. Именно поэтому #{userDetailBean.view} всегда пусто.

Я никогда не использовал такую ​​конструкцию с <c:if>, но у меня были подобные представления, подобные этой, где все это работает только с бином @ViewScoped, где свойство рендеринга применяется к полноценному компоненту JSF вместо <c:if>.

В качестве первого шага избавьтесь от <c:if> s и перенесите их тесты в атрибут rendered тех <h:form> s, которые они упаковывают:

<h:form rendered="#{empty userDetailBean.view}">
    ...
</h:form>
<h:form rendered="#{not empty userDetailBean.view}">
    ...
</h:form>

Если напрасно (я полагаю, что это не удастся, потому что вы не используете ajax и viewparams не сохраняются), и бин действительно @RequestScoped, тогда вам нужно пометить его @ViewScoped, чтобы сохранить условия рендеринга .

Смежные вопросы:


Вне зависимости от проблемы, я бы предпочел использовать <h:panelGroup /> вместо <h:inputHidden />, чтобы «заполнить» пустые ячейки таблицы. Они дешевле кодируются и декодируются, а также заканчиваются лучшим HTML.

...