JSF2.0 + Primefaces 3.0.1 + jquery 1.6.4 + p: commandLink + IE8 генерирует неожиданный вызов метода или свойства - PullRequest
2 голосов
/ 29 февраля 2012

Команда

Я запускаю описанную установку на пристани Maven (8.0.1) и получаю некоторые странные исключения в IE8 (только!).

Ошибка, которую мне выдает IE, выглядит так:

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Timestamp: Wed, 29 Feb 2012 14:09:38 UTC

Message: Unexpected call to method or property access.
Line: 23
Char: 22640
Code: 0
URI: http://127.0.0.1:8080/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces&v=3.0.1

Описанный фрагмент кода в 'javax.faces.resource / jquery / jquery.js.jsf? Ln = primefaces & v = 3.0.1' в строке 23, символ 22640 - это {{'после' finally ':

resolveWith:function(bw,bv){
   if(!bs&&!bu&&!br){
      bv=bv||[];
      br=1;
      try{
         while(bt[0]){
            bt.shift().apply(bw,bv)
         }
      }finally{
         bu=[bw,bv];
         br=0
      }
   }
   return this
}

Здесь JSF XHTML воспроизводит эту ошибку:

<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:c="http://java.sun.com/jstl/core"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
   <h:head>
   </h:head>
   <h:body>
      <h:form>
         <h:form>
            <p:dialog id="testDialog" header="Test Dialog" modal="true"
               widgetVar="testDialog" dynamic="true" resizable="true"
               maximizable="true" showEffect="fade" hideEffect="explode">
               <h:outputText value="Dialog!" />
            </p:dialog>
            <p:commandLink styleClass="button" oncomplete="testDialog.show()">
               <h:outputText value="Click me!" />
            </p:commandLink>
         </h:form>
      </h:form>
   </h:body>
</f:view>
</html>

Следующий JSF XHTML не выдает ошибку:

<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:c="http://java.sun.com/jstl/core"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
   <h:head>
   </h:head>
   <h:body>
      <h:form>
         <p:dialog id="testDialog" header="Test Dialog" modal="true"
            widgetVar="testDialog" dynamic="true" resizable="true"
            maximizable="true" showEffect="fade" hideEffect="explode">
            <h:outputText value="Dialog!" />
         </p:dialog>
         <p:commandLink styleClass="button" oncomplete="testDialog.show()">
            <h:outputText value="Click me!" />
         </p:commandLink>
      </h:form>
   </h:body>
</f:view>
</html>

Разница заключается во вложенной форме в первом примере. Это сильно идеализированный пример, но он отражает то же поведение, если вкладывает компоненты и диалоги. Всякий раз, когда форма является вложенной, вышеупомянутая ошибка возникает в IE8. FF и другие просто открывают диалог, как и ожидалось.

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

CommandButton ведет себя так же. Я прочитал несколько других подходов и ошибок, связанных с сообщением об ошибке IE, но не нашел никакого решения или полезного совета.

Мне было бы интересно следующее:

а) Можете ли вы воспроизвести данное поведение? б) Есть ли у вас какие-либо идеи, как обойти или решить эту проблему (возможно, каким-то образом обновляя jquery)?

Сначала я попытался проверить свой HTML5, но даже с не HTML5 и очень сокращенным html это происходит.

Спасибо за любую помощь, подсказку или, возможно, ссылку на любую информацию заранее!

С уважением,

Чувак

PS: Пожалуйста, если вы думаете, что знаете что-то, подтолкните меня, чтобы я добавил больше деталей или необходимых ресурсов, я был бы рад помочь другим здесь!

1 Ответ

4 голосов
/ 29 февраля 2012

Вложение форм запрещено в HTML.Поведение браузера не определено.С точки зрения JSF, вы никогда не должны вкладывать <h:form> компоненты.

Что касается причины, по которой вам нужно было вкладывать формы,

Если бы избежать вложенных формно это невозможно, потому что mojarra не позволил бы мне поместить, например, commandLink, который содержится в компоненте, не окружая его формой.

Это не так.Возможно, вы принимаете следующее хорошо известное предупреждение слишком серьезно.

ПРЕДУПРЕЖДЕНИЕ. Компонент формы должен иметь UIForm в своем происхождении.Предложение: заключите необходимые компоненты в <h:form>

Это «просто» предупреждение, а не ошибка.Если ваша страница работает нормально, вы можете просто проигнорировать предупреждение.Это предупреждение будет отображаться, только если вы установили этап проекта на Development.Он не будет отображаться, если вы установите его на Production.

В ранних версиях Mojarra, однако, была ошибка, из-за которой это предупреждение также появлялось, когда вы указали, например, командную ссылку в каком-либо дочернем / includeфайл шаблона, в то время как форма помещается в основной шаблон (который, таким образом, находится внутри физически другого файла).Обновление версии Mojarra должно исправить это неверное и запутанное предупреждение.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...