Меню странное поведение рендеринга - PullRequest
1 голос
/ 19 января 2012

Извините за длину этого поста, но на данный момент мы ничего не понимаем, поэтому я хочу опубликовать как можно больше подробностей.У нас проблема с меню primefaces 2.2 в Internet Explorer 9 .Мы используем eclipse для разработки веб-приложения, сервер представляет собой tomcat версии 6.0.18 , и его нельзя обновить из-за требований заказчика.Мы включили все необходимые библиотеки внутри войны, это тоже требование заказчика.Ниже приведен (исчерпывающий) список библиотек, которые мы включаем в папку web-inf / lib приложения:

  • Primefaces 2.2.1
  • antlr 2.7.6
  • commons-collection 3.1
  • commons-fileupload 1.2.1
  • commons-io 1.4
  • dom4j 1.6.1
  • hibernate jpa 2.0 api 1.0.0 final
  • hibernate 3
  • itext-xtra 5.1.3
  • itextpdf 5.1.3
  • javassist 3.12.0 га
  • jsf-apiВнедрение API Mojarra JSF 2.1.1 (20110408-FCS)
  • jsf-impl (как указано выше, проверенное чтение манифеста)
  • jstl 1.2
  • jta 1.1
  • log4j 1.2.15
  • redmond 1.0.1
  • slf4j-api 1.6.1
  • slf4j-log4j12-1.6.4
  • xmlworker - 1.1.1
  • commons-email 1.2

До сих пор мы тестировали приложение по трем различным сценариям:

  1. Среда разработки: localhost tomcat 6.0.18, eclipse, ie9, http
  2. Развернутое приложение: tomcat 6.0.18, https - TAM (система ibm tivoli sso), т.е. 9
  3. Развернутое приложение: tomcat 6.0.18, https - TAM (система ibm tivoli sso), firefox 9

меню содержит три корневых меню: «новые запросы», «работа в процессе» и «администрирование».Для обоих случаев 1. и 2. (включая ie9) второе меню «незавершенное производство» исчезает и открывается во время навигации (щелчок по другим меню, нажатие кнопок перенаправления, ...), остальные два остаются видимыми.Нам не удалось ни найти правила, ни систематически воспроизвести поведение.Как вы можете видеть из приведенного ниже кода, мы прокомментировали установщик подменю, чтобы убедиться, что не было какой-то программной ошибки, которая задавала ему что-то другое.С Firefox этого никогда не происходит, все работает нормально.Наконец, только в случае 2 (т. Е. 9 + https через tam) мы иногда получаем исключения рендеринга сервлетов, до сих пор мы получали следующее:

  • javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.IllegalStateException: родитель не был нулевым, но этот компонент не связан
  • javax.servlet.ServletException: Menubar должен находиться внутри элемента формы
  • ArrayIndexOutOfBounds

меню простых лиц, которое ведет себя странно, создается кодом, а его компонент поддержки имеет область действия сеанса , соответствующий код указан ниже.Так это проблема с библиотекой?проблема с браузером?Баг нашего приложения?Может кто-нибудь предложить какой-нибудь тест, чтобы сузить проблему или инструмент, чтобы получить некоторые подсказки?главная страница контейнера:

<h:body>
<h:form id="masterForm">
    <p:growl id="msg" life="10000" showDetail="true" sticky="false" />
</h:form>
<p:layout fullPage="true">
    <p:layoutUnit position="top" height="90" id="layUnitNorth"
        resizable="false" closable="false" collapsible="false"  
        scrollable="null" zindex="199">
        <ui:insert name="header">
            <div id="userInfoPanel">
                <ui:include src="userinfo.xhtml" />
            </div>              
            <ui:include src="menu.xhtml" /> 
        </ui:insert>
    </p:layoutUnit>

    <p:layoutUnit position="center" scrollable="true">
        <ui:insert name="content">
            <p:layoutUnit position="center">
            </p:layoutUnit>
        </ui:insert>
    </p:layoutUnit>
</p:layout>

страница меню:

<ui:composition>
<h:form id="menuForm">
    <p:menubar effect="slide" styleClass="menuCustom">
        <p:submenu label="New" >
            <p:menuitem value="new requests" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=0');" />
            <p:menuitem value="channel 1" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=1');" />
            <p:menuitem value="channel 2" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=2');" />
            <p:menuitem value="channel 3" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=3');" />
        </p:submenu>
        <p:submenu label="work in progress"
            binding="#{menuCtrl.boxSubMenu}">
        </p:submenu>
        <p:submenu label="administration" rendered="#{userInfo.admin}">
            <p:menuitem value="Customers" url="#" />
            <p:menuitem value="Templates" url="#" />
            <p:menuitem value="Digital signature" url="#" />
        </p:submenu>
    </p:menubar>
</h:form>

menuCtrl - сессионный компонент:

public class MenuCtrl {

final static Logger log = Logger.getLogger(MenuCtrl.class);

private Submenu boxSubMenu;

public void setBoxSubMenu(Submenu boxSubMenu) {
    //this.boxSubMenu = boxSubMenu;
}

public Submenu getBoxSubMenu() {
    return boxSubMenu;
}

public MenuCtrl() {
    try {
        boxSubMenu = BoxMenuHelper.getBoxSubMenu();
    } catch (Exception ex) {            
        String msg = "Impossibile creare il menu di navigazione nei box";
        log.error(msg, ex);
        showMessage(FacesMessage.SEVERITY_ERROR, msg);
    }
}

}

фабричный метод подменю:

    public static Submenu getBoxSubMenu() throws Exception{
    CatalogazioneRepository br = new CatalogazioneRepository();
    Submenu sm = new Submenu();
    try {
        for (Catalogazione box : br.getOnlyBoxes()) {
            MenuItem item = new MenuItem();
            item.setId("boxMenuItem" + box.getId());
            item.setValue(box.getNome());
            item.setOnclick("navigateTo('Box/ListaRichieste.xhtml?box="+ box.getId() +"');");
            sm.getChildren().add(item);
        }
        return sm;
    } catch (Exception ex) {
        String msg = "Errore durante la creazione del menu di navigazione nei box";
        log.error(msg, ex);
        throw new Exception(msg, ex);
    }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2013

Этот пост немного устарел, но, если вы используете подобное, предпочтите атрибуты; - результат - URL

Это использование ниже может понадобиться только для особых требований java-скрипта к операциям на стороне клиента:

    <p:menuitem value="new requests" onclick="navigateTo('Richieste/ListaRichieste.xhtml?canale=0');" />

Предпочитаю ниже параметров:

    <p:menuitem value="new requests" url="Richieste/ListaRichieste.xhtml?canale=0"/>

или

    <p:menuitem value="new requests" outcome="Richieste/ListaRichieste?canale=0" />
0 голосов
/ 20 января 2012

Я нашел это Primefaces сообщение на форуме

Они (optimus.prime - создатель PrimeFaces, а Олег очень продвинутый пользователь форума) утверждают, что вы должны поместить конструктор меню в область запроса, чтобы избежать странного поведения.

...