При использовании CombinedResourceHandler появляется предупреждение «Невозможно сохранить динамическое действие с clientId 'j_idX', так как UIComponent не может быть найден». - PullRequest
2 голосов
/ 07 ноября 2019

Я получаю предупреждения ниже один раз, когда я отправляю и обновляю = "@ form".

14:03:23,139 WARNING [javax.enterprise.resource.webcontainer.jsf.application.view] (default task-27) Unable to save dynamic action with clientId 'j_id2' because the UIComponent cannot be found
14:03:23,139 WARNING [javax.enterprise.resource.webcontainer.jsf.application.view] (default task-27) Unable to save dynamic action with clientId 'j_id3' because the UIComponent cannot be found

Но удаляю "org.omnifaces.resourcehandler.CombinedResourceHandler" изface-config. xml, предупреждения не приходят.

Разработка среды ...

  • Primefaces 7.0
  • Omnifaces 3.4
  • WildFly16.0.0.Final

Вот минимальная выборка. (Но мой производственный код более сложен, так много (20-1000) предупреждений получают.)

index.xhtml

<?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://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<f:metadata><f:viewAction action="#{indexView.init()}"/></f:metadata>
<h:body>
    <h:form id="mainForm">
        <p:messages id="messages"/>
        <p:panelGrid id="panelGrid" columns="3" layout="grid">
            <p:outputLabel id="labelInput1" for="@next" value="input"/>
            <p:selectOneMenu id="input" value="#{indexView.selectOne}">
                <f:selectItems value="#{indexView.itemCandidates}" var="i" itemLabel="#{i}" itemValue="#{i}"/>
            </p:selectOneMenu>
            <p:commandButton id="btn" value="submit" process="panelGrid" update="@form" actionListener="#{indexView.submit}"/>
        </p:panelGrid>
    </h:form>
</h:body>
</html>

IndexView.java

package com.sample.primafaces_operation_verification;

import javax.faces.view.ViewScoped;
import // omitted // ;

@Named
@ViewScoped
public class IndexView implements Serializable {

    @Getter
    private List<String> itemCandidates;

    @Getter @Setter
    private String selectOne;

    public void init() {
        this.itemCandidates = List.of("aaa", "bbb", "ccc", "ddd");
    }

    public void submit() {
        Messages.addGlobalInfo("Selected item : {0}", selectOne);
    }
}

face-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">
    <application>
        <resource-handler>org.omnifaces.resourcehandler.CombinedResourceHandler</resource-handler>
        <action-listener>org.primefaces.application.DialogActionListener</action-listener>
        <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
        <view-handler>org.primefaces.application.DialogViewHandler</view-handler>
    </application>
</faces-config>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
        <param-value>0</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.FONT_AWESOME</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.MOVE_SCRIPTS_TO_BOTTOM</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.numberOfLogicalViews</param-name>
        <param-value>6</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.numberOfViewsInSession</param-name>
        <param-value>6</param-value>
    </context-param>
    <context-param>
        <param-name>org.omnifaces.VIEW_SCOPE_MANAGER_MAX_ACTIVE_VIEW_SCOPES</param-name>
        <param-value>6</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.faces</welcome-file>
    </welcome-file-list>
</web-app>

Я ожидаю, что не получу предупреждения. Как я могу это исправить?

1 Ответ

4 голосов
/ 07 ноября 2019

Я нашел несколько ссылок на это предупреждение, но не дубликат на SO, заслуживающем голосования, чтобы закрыть ваш вопрос как дубликат, поэтому я попытаюсь ответить цитатами:

вложенная форма PrimeFaces внутри p:диалог с appendTo = "@ (body)

Мишель Мариотти говорит:

Эти предупреждения, как и в моих экспериментах, безвредны и могут бытьбезопасно проигнорировано. Однако я открыл запрос на получение , чтобы в конечном итоге исправить его.


BootsFaces выпуск 325 Невозможно сохранить динамическое действие с clientId 'j_id ... '

stephanrauh прокомментирован 22 марта 2016 г.

Это предупреждение, а не ошибка. Как только вы настроите ProjectStage на работу, предупреждение будетушел. Поэтому я считаю, что это небольшая неприятность, а не серьезная ошибка. В любом случае, вы получаете предупреждение без использования OmniFaces?

stephanrauh прокомментировано 22 марта 2016

Маловероятно. Предупреждение появляется при манипулированииДерево DOM JSF использует неправильный API. Например, удалив файл ресурса, просто удалив его из списка. Это то, что OmniFaces делал в более ранней версии. JSF обнаруживает, что чего-то не хватает, нервничает и реагирует, опуская эти запутанные предупреждения. Возможно, что BootsFaces использует «запрещенный» API, но я полагал, что это исправили. В любом случае, вы можете загрузить простой проект, который воспроизводит предупреждение? Это делает нашу работу намного проще.


В заключение предупреждение вызывается org.omnifaces.resourcehandler.CombinedResourceHandler удалением ресурсов из представления, которое является частью его основных функций. Попробуйте установить javax.faces.PROJECT_STAGE на Production и ввести предупреждение во время кодирования.

...