一只特立直行的猪

Trinidad 1.2.14 is MyFaces implementation for JSF 1.2 specification. It’s mainly released by Apache MyFaces and it’s considered last official release that you can download from Apache MyFaces Trinidad site.

特立尼达1.2.14是JF 1.2规范的MyFaces实现。 它主要由Apache MyFaces发布,它被认为是您可以从Apache MyFaces Trinidad 网站下载的最后一个正式版本。

Actually, Trinidad library is a leading library that truly help you getting JSF application in the most easiest way, it’s contained a lot of important components that can help you avoid wasting your time creating or developing any component you may need.

实际上,Trinidad库是一个领先的库,它真正地以最简单的方式帮助您获得JSF应用程序,它包含许多重要的组件,可以帮助您避免浪费时间创建或开发所需的任何组件。

This version of Trinidad is almost ideal but there’s one issue you may be suffering from when it comes to deal with, it’s actually doesn’t understand Ajaxifying request on IE 11 and that may cause a headache for a lot of developers whom want to use this feature.

特立尼达的这个版本几乎是理想的,但是在处理时您可能会遇到一个问题,它实际上不了解IE 11上的Ajaxifying请求,这可能使许多想要使用此功能的开发人员感到头痛特征。

This tutorial is a solid trial that would help you getting full-fledged Trinidad 1.2.14 library ajaxified comfortably on all version of IE including IE 11. You may review the internet and Trinidad JIRA but actually, you my be wondering that the Trinidad itself doesn’t provide any solution for that. All what you may find is just a scattered patch that’s required you to work on it to justify the needed solution.

本教程是一个可靠的试用版,它将帮助您轻松地在包括IE 11在内的所有版本的IE上完善成熟的Trinidad 1.2.14库。您可能会回顾Internet和Trinidad JIRA,但实际上,您是想知道Trinidad本身没有对此不提供任何解决方案。 您可能会发现的只是一个分散的补丁,需要您对其进行修改以证明所需的解决方案是正确的。

使用的工具 (Tools Used)

I’ve assumed that you will use the below Tools/Envs for getting this practice applied:

我假设您将使用以下工具/环境来应用此实践:

  • Any JEE container.任何JEE容器。
  • JSF Trinidad 1.2.14 API & Impl.JSF Trinidad 1.2.14 API和Impl。
  • JDK 1.6.JDK 1.6。
  • Eclipse Kepler 4.3.Eclipse开普勒4.3。
  • Maven 3.2.1.Maven的3.2.1。

特立尼达的阿贾克斯概念 (Ajax Concept In Trinidad)

Ajax concept hasn’t vary differ from what already most of developers were knew. It’s simple partial submission for the page; instead of sending a full JSF Post-Back request into server, you’re just sending part of the page into server and update part of it in the response.

Ajax概念与大多数开发人员所知道的并没有什么不同。 这是页面的简单部分提交; 而不是向服务器发送完整的JSF回发请求,您只是将页面的一部分发送到服务器并在响应中更新页面的一部分。

Here, you would see a true Ajax application that uses a Trinidad 1.2.14 upon Chrome browser. In fact and indeed the implementations of Ajax aren’t analogous to that degree that you may use different mechanisms for ِAjaxifying your application if you’re decided to use different JSF vendors. That is, there’s no standard way to Ajaxify, so it depends on the library that you’re going to use.

在这里,您会看到一个真正的Ajax应用程序,该应用程序在Chrome浏览器上使用Trinidad 1.2.14。 实际上,实际上Ajax的实现与这个程度并不相似,如果您决定使用其他JSF供应商,则可以使用不同的机制来“对应用程序进行Ajax化”。 也就是说,没有标准的Ajaxify方式,所以这取决于您将要使用的库。

index.jsp

index.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="https://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="https://java.sun.com/jsf/html"%>
<%@ taglib prefix="tr" uri="https://myfaces.apache.org/trinidad"%>
<%@ taglib prefix="trh" uri="https://myfaces.apache.org/trinidad/html"%><f:view><tr:form><h:panelGrid columns="4"><h:outputLabel value="Enter your message here"></h:outputLabel><tr:inputText value="#{messageBackingBean.message}" partialTriggers="ajaxAction"></tr:inputText><tr:commandButton id="ajaxAction" text="Ajax Sending" action="#{messageBackingBean.addMessage}" partialSubmit="true"></tr:commandButton><tr:commandButton id="nonAjaxAction" text="Non-Ajax Sending" action="#{messageBackingBean.addMessage}"></tr:commandButton></h:panelGrid><tr:statusIndicator inlineStyle="padding-left:400px;"><f:facet name="busy"><h:graphicImage url="/images/ajax-loader.gif"></h:graphicImage></f:facet></tr:statusIndicator><h:panelGrid columns="1"><f:facet name="header"><h:outputText value="Sent Messages"></h:outputText></f:facet><tr:table value="#{messageBackingBean.messages}" var="message" partialTriggers="ajaxAction"><tr:column><h:outputText value="#{message}"></h:outputText></tr:column></tr:table></h:panelGrid></tr:form>
</f:view>

MessageBackingBean.java

MessageBackingBean.java

package com.journaldev;import java.util.ArrayList;public class MessageBackingBean {private String message = "";private ArrayList<String> messages = new ArrayList<String>();public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public ArrayList<String> getMessages() {return messages;}public void setMessages(ArrayList<String> messages) {this.messages = messages;}@SuppressWarnings("static-access")public String addMessage() throws InterruptedException{// Wait for 5 seconds, just to ensure the action is invoked in an Ajax behaviorThread.currentThread().sleep(5000);this.messages.add(message);this.message = "";return "";}}

faces-config.xml

faces-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<faces-config xmlns="https://java.sun.com/xml/ns/javaee"xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"version="1.2"><application><default-render-kit-id>org.apache.myfaces.trinidad.core</default-render-kit-id></application><managed-bean><managed-bean-name>messageBackingBean</managed-bean-name><managed-bean-class>com.journaldev.MessageBackingBean</managed-bean-class><managed-bean-scope>session</managed-bean-scope></managed-bean>
</faces-config>

pom.xml

pom.xml

<?xml version="1.0"?>
<projectxsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev</groupId><artifactId>Trinidad-JSF-APP</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>Trinidad-JSF-APP Maven Webapp</name><url>https://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>javax</groupId><artifactId>jsf-api</artifactId><version>1.2_13</version></dependency><dependency><groupId>javax</groupId><artifactId>jsf-impl</artifactId><version>1.2_13</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.myfaces.trinidad</groupId><artifactId>trinidad-api</artifactId><version>1.2.14</version></dependency><dependency><groupId>org.apache.myfaces.trinidad</groupId><artifactId>trinidad-impl</artifactId><version>1.2.14</version></dependency></dependencies><build><finalName>Trinidad-JSF-APP</finalName></build>
</project>

web.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-appxsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"xmlns="https://java.sun.com/xml/ns/javaee" xmlns:web="https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>Trinidad-JSF-APP</display-name><context-param><param-name>javax.faces.CONFIG_FILES</param-name><param-value>/WEB-INF/faces-config.xml</param-value></context-param><context-param><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>server</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><servlet-name>resources</servlet-name><servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>/faces/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>resources</servlet-name><url-pattern>/adf/*</url-pattern></servlet-mapping>
</web-app>

Here’s detailed explanation for the code listed above:

这是上面列出的代码的详细说明:

  • Trinidad has initiated a PPR through using of its library that’s grabbed by resources Servlet. This script library will be injected into your JSF page as soon as it’s rendered and it would have this name /CONTEXT/adf/jsLibs/Common1_2_14.jsif you’re explored your page header.特立尼达通过使用resources Servlet抓取的库启动了PPR。 该脚本库将在呈现后立即注入到您的JSF页面中,如果您浏览了页面标题,其名称/CONTEXT/adf/jsLibs/Common1_2_14.js
  • The action Ajax Sending will be used to ajaxify the calling of addMessage method/action.Ajax Sending将用于取消对addMessage方法/操作的调用。
  • The action Non-Ajax Sending will be used to initiate normal PostBack request.“ Non-Ajax Sending ”操作将用于启动正常的PostBack请求。
  • As soon as the Ajax request is triggered, the Ajax loader image will be displayed by statusIndicator Trinidad Tag. This will give you a good indicator for being the request is initiated using Ajax manner.一旦触发了Ajax请求,Ajax加载程序映像将由statusIndicator Trinidad Tag显示。 这将为您使用Ajax方式发起请求提供一个很好的指示。
  • At the MessageBackingBean, you will be waiting there in for 5 seconds, just to give you a chance simulating heavy processing.在MessageBackingBean ,您将在那里等待5秒钟,这仅是给您一个模拟繁重处理的机会。

Now, let’s see a simple demonstration for what already implemented till now using a non error prone Chrome browser.

现在,让我们看一个简单的演示,演示到目前为止使用不易出错的Chrome浏览器实现的功能。

Below figure shows you the initial view of the index.jsp that’s already considered as default page.

下图显示了已经被视为默认页面的index.jsp的初始视图。

Enter a message inside the box below and submit the Ajax Sending action. You will notice that the ajax indicator loading image will be displayed, just wait for 5 seconds before the message is sent.

在下面的框中输入一条消息,然后提交Ajax发送操作。 您会注意到,将显示ajax指示符加载图像,只需等待5秒钟,然后发送消息即可。

The same behavior can be achieved through using a default Post Back JSF action and the same result would be occurred with one major difference is being the request is Post back.

通过使用默认的Post Back JSF操作可以实现相同的行为,并且会发生相同的结果,主要区别在于请求为“回发”。

有什么问题 (What’s The Problem)

As you’ve noticed above, Ajax Trinidad has functioned properly on the Chrome where no issues were noticed. But what if you’re going to IE 11, you will absolutely get Ajax failed due to Trinidad Implementation missing.

正如您在上面注意到的那样,Ajax Trinidad在Chrome上正常运行,没有发现任何问题。 但是,如果您要使用IE 11,那绝对会由于特立尼达实现的缺失而使Ajax失败。

Let’s look at the behavior below that shows you the impact of browsing the same Application above on the IE 11 – Notice, this issue weren’t noticed at any version of IE and that what i will explore in the next coming lines.

让我们看一下下面的行为,该行为向您展示在IE 11上浏览上述相同应用程序的影响–注意,此问题在任何版本的IE上均未发现,我将在接下来的几行中进行探讨。

Here’s below a detailed explanation for the behavior seen above:

以下是上述行为的详细说明:

  • Once you’ve clicked on the Ajax action, the ajax loading image will be displayed but actually the behavior is little bit different where the IE won’t get updated the Table of Sent Messages as well as an error message will be thrown says Connection Failed.单击Ajax操作后,将显示ajax加载图像,但实际上行为稍有不同,即IE将不会更新已发送消息表以及将抛出错误消息,提示连接失败。
  • If you’ve reviewed your Console or Logger, you’re likely get an exception like below.如果您已经查看过控制台或记录器,则可能会遇到如下异常。

Thrown Exception

Thrown Exception

SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalArgumentExceptionat org.apache.myfaces.trinidadinternal.renderkit.core.ppr.PPRResponseWriter.<init>(PPRResponseWriter.java:59)at org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit.createResponseWriter(CoreRenderKit.java:609)at org.apache.myfaces.trinidadinternal.renderkit.RenderKitDecorator.createResponseWriter(RenderKitDecorator.java:54)at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:189)at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:189)at org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:193)at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Thread.java:662)
  • Actually, the above listed exception wasn’t thrown on any browser except the IE 11, even if you’re used IE 7, 8, 9 or 10 this issue won’t be noticed.实际上,除了IE 11之外,没有在任何浏览器上引发以上列出的异常,即使您使用的是IE 7、8、9或10,也不会注意到此问题。
  • This above exception is caused due to unavailability of correct Agent value. That is, RequestContextImplgetAgent will be asked to determine the type of the Agent that actually try to display the view. By its turn, the AgentFactoryImpl_populateMozillaAgentImpl method will be called because the Agent description starts with Mozilla keyword.出现上述异常是由于无法提供正确的座席值所致。 也就是说, RequestContextImpl getAgent将被要求确定实际尝试显示视图代理的类型。 依次,将调用AgentFactoryImpl _populateMozillaAgentImpl方法,因为代理说明以Mozilla关键字开头。
  • The _populateMozillaAgentImpl method will return wrong value that’s affected the normal procedure of your Partial Page Trigger (PPR) handling. User agent of IE 11 is Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko and the _populateMozillaAgentImpl method won’t be able to recognize the Agent Type which will be finally just like in the figure below:_populateMozillaAgentImpl方法将返回错误的值,该值会影响部分页面触发器(PPR)处理的正常过程。 IE 11的用户代理是Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko_populateMozillaAgentImpl方法将无法识别代理类型,最终将如下图所示:
  • But if you’re modifying the user agent string from your IE browser to be Internet Explorer 10 or less and you tried to initiate a new Partial Page Request, you will find a different agent string, that will be Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)and the agent type will be just like figure below:但是,如果您正在将IE浏览器中的用户代理字符串修改为Internet Explorer 10或更小版本,并且尝试启动新的“部分页面请求”,则会找到另一个代理字符串,该字符串将为Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)和代理类型将如下图所示:
  • The same correct value you will still be able to receive as long as you used an IE version less than 11. Look below for the value of IE 8.只要您使用的IE版本小于11,您仍将能够获得相同的正确值。请在下面查找IE 8的值。

As a conclusion, the main issue is relevant for _populateMozillaAgentImpl that should be fixed to contain a proper handling for IE 11.

结论是,主要问题与_populateMozillaAgentImpl有关,应该解决此问题以包含对IE 11的正确处理。

将特立尼达1.2.14源代码Impl库导入Eclipse项目 (Importing Trinidad 1.2.14 Source Code Impl Library into Eclipse Project)

To know the main cause of this issue, it’s worthy to get Trinidad Impl debugged to know from where we can start the fix procedure. Upon that, let’s basically download Trinidad 1.2.14 and look inside to know what the cause of this behavior.

要了解导致此问题的主要原因,值得调试Trinidad Impl以从哪里开始修复程序。 基于此,让我们基本上下载特立尼达1.2.14并查看内部信息,以了解造成此现象的原因。

  • Download Trinidad impl 1.2.14 source code from Trinidad Apache official site.从Trinidad Apache官方网站下载Trinidad impl 1.2.14源代码。
  • Unzip trinidad-1.2.14-src-all.zip into your hard storage.将trinidad-1.2.14-src-all.zip解压缩到您的硬盘中。
  • From your Eclipse Project Explorer, click new – import and choose Maven project.在Eclipse Project Explorer中,单击new – import,然后选择Maven项目。
  • Paste your Trinidad location just as you see below.粘贴您的特立尼达位置,如下所示。
  • Now, you’re able of getting Trinidad Impl compiled and packaged through using of both Maven command & Eclipse. Figure below shows you the success cleaning and packaging for Trinidad Impl library.现在,您可以通过使用Maven命令和Eclipse来编译和打包Trinidad Impl。 下图显示了特立尼达Impl库成功清洁和包装的过程。
  • Now, you can provide your Fix for the AgentFactoryImpl and provide your own Trinidad Impl library.现在,您可以为AgentFactoryImpl提供Fix,并提供自己的Trinidad Impl库。

定影剂FactoryImpl (Fixing AgentFactoryImpl)

According for the previous investigation and to fix the issue of IE 11, I’ve provided you the new implementation of _populateMozillaAgentImpl to be like below:

根据先前的调查并修复IE 11的问题,我为您提供了_populateMozillaAgentImpl的新实现,如下所示:

_populateMozillaAgentImpl

_populateMozillaAgentImpl

/*** Returns an AgentEntry for the "Mozilla" family of browsers - which* most at least pretend to be.*/private void _populateMozillaAgentImpl(String agent,AgentImpl agentObj){int ieTridentIndex = -1;int paren = agent.indexOf('(');agentObj.setType(Agent.TYPE_DESKTOP); //Is this default realli okay??? These days Mobile agents also use Mozilla/xx.xx// No section to qualify the agent;  assume Mozilla/Netscapeif (paren == -1){agentObj.setAgent(TrinidadAgent.AGENT_NETSCAPE);agentObj.setAgentVersion(_getVersion(agent, agent.indexOf('/')));}else{paren = paren + 1;boolean isJDevVE = agent.indexOf("JDeveloper", paren) > 0;boolean isJDevJSVE = agent.indexOf("JDeveloper JS", paren) > 0;if (agent.indexOf("Konqueror", paren) >= 0){agentObj.setType(Agent.TYPE_DESKTOP);agentObj.setAgent(Agent.AGENT_KONQUEROR);agentObj.setAgentVersion(_getVersion(agent, agent.lastIndexOf('/')));}
// Added to get IE 11 resolved & to handle all IE browserselse if ((ieTridentIndex = agent.indexOf("Trident", paren)) > -1) {agentObj.setAgent(Agent.AGENT_IE);// As of IE8, the Trident version is the most reliable method to find the // maximum capabilities of IE.  The IE WebBrowser Control by default is in IE7 // compatability - MSIE 7.0;// As of IE11, the "MSIE" token no loger exists.  //Trident/4.0 -> IE8//Trident/5.0 -> IE9//Trident/6.0 -> IE10//Trident/7.0 -> IE11Double ieTridentVersion = Double.valueOf(_getVersion(agent, ieTridentIndex + "Trident/".length() - 1));agentObj.setAgentVersion(String.valueOf(ieTridentVersion + 4.0));    }      else if (agent.startsWith("compatible", paren)){int ieIndex = agent.indexOf("MSIE", paren);if (ieIndex < 0){// check for Palmint palmIndex = agent.indexOf("Elaine", paren);if (palmIndex > 0){agentObj.setType(Agent.TYPE_PDA);agentObj.setAgent(TrinidadAgent.AGENT_ELAINE);agentObj.setAgentVersion(_getVersion(agent, palmIndex));agentObj.setPlatform(Agent.PLATFORM_PALM);}}else{agentObj.setAgent(Agent.AGENT_IE);agentObj.setAgentVersion(_getVersion(agent, ieIndex + 4));}}else{agentObj.setAgent(TrinidadAgent.AGENT_NETSCAPE);agentObj.setAgentVersion(_getVersion(agent, agent.indexOf('/')));}// try to determine the OS, if unknownif (agentObj.getPlatformName() == null || agentObj.getPlatformName().equals(Agent.PLATFORM_UNKNOWN)){// Hack: treat the JDeveloper agent as Windows,// so that we assume IE 6.0 Windows capabilitiesif ((agent.indexOf("Win", paren) > 0) || isJDevVE){agentObj.setPlatform(Agent.PLATFORM_WINDOWS);}else if (agent.indexOf("Mac", paren) > 0){agentObj.setPlatform(Agent.PLATFORM_MACOS);}else if (agent.indexOf("Linux", paren) > 0){agentObj.setPlatform(Agent.PLATFORM_LINUX);}else if (agent.indexOf("Sun", paren) > 0){agentObj.setPlatform(Agent.PLATFORM_SOLARIS);}}if (isJDevVE){agentObj.__addRequestCapability(TrinidadAgent.CAP_IS_JDEV_VE,Boolean.TRUE);if (isJDevJSVE){agentObj.__addRequestCapability(TrinidadAgent.CAP_IS_JDEV_JAVASCRIPT_VE,Boolean.TRUE);}}}}

Here’s detailed explanation for the code listed above:

这是上面列出的代码的详细说明:

  • We added the code commented to handle the IE 11 & all types of IEs.我们添加了注释的代码来处理IE 11和所有类型的IE。
  • You can download the full AgentFactoryImpl right here AgentFactoryImpl.您可以在此处直接下载完整的AgentFactoryImpl AgentFactoryImpl 。
  • Replace the downloaded file or re-implement the method and make your code compiled and package the updated Trinidad impl library just like you saw in the Maven figure above.替换下载的文件或重新实现该方法,并使代码编译并打包更新的Trinidad impl库,就像在上面的Maven图中看到的那样。
  • Install your latest Trinidad Impl library using mvn clean package install.使用mvn clean package install安装最新的特立尼达Impl库。

修复后,使用IE 11演示PPR示例 (Demonstrate PPR Sample Using IE 11 After Fixing)

This figure below shows you a proper handling for the PPR request against IE 11.

下图显示了针对IE 11的PPR请求的正确处理。

资源资源 (Resources)

  • Trinidad JIRA特立尼达JIRA

摘要 (Summary)

Trinidad is a leading implementation for JSF and it provides you a different kinds of components that actually have the capability of initiating requests Post back or partially. The main issue you may got when it comes to deal with Trinidad latest release 1.2.14 is handling partial request on IE 11.  This tutorial will help you getting this issue resolved, so contribute us by commenting below.

特立尼达(Trinidad)是JSF的领先实现,它为您提供了不同种类的组件,这些组件实际上具有启动请求的能力,可以发回部分请求。 在处理特立尼达最新版本1.2.14时,您可能遇到的主要问题是处理IE 11上的部分请求。本教程将帮助您解决此问题,因此请在下面进行评论,以帮助我们。

翻译自: https://www.journaldev.com/6227/fixing-trinidad-impl-1-2-14-library-to-get-all-ie-browsers-ajaxified-properly

一只特立直行的猪

一只特立直行的猪_修复特立尼达IE 11部分页面请求(PPR)问题/支持所有IE浏览器相关推荐

  1. 为什么linux的新得立软件下载,linux,debian_蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理?,linux,debian - phpStudy...

    蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理? (synaptic:9573): GLib-CRITICAL **: g_child_watch_add_full: ass ...

  2. 夸克浏览器怎么安装脚本_广告看烦了?别砸手机!这五款浏览器能拯救你

    哈喽大家好,欢迎来到黑马公社. 随着各种良莠不齐的内容开始泛滥, 黑马发现自己很难通过网络 第一时间找到自己想要的内容. 在电脑上,黑马为自己的每个浏览器 都安装了不下三个广告屏蔽插件, 而在手机上, ...

  3. 计算机中丢失msc,mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dll

    mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dll mscvr120.dll是系统的非常重要的一个文件,相信很多的人都是遇到文件丢失的情况,这个时候就需要你在下载一个d ...

  4. jsp 模板引擎。无需 tomcat,只需一个 jar 包直接根据 jsp 源文件渲染得到 html 页面

    jsp 模板引擎.无需 tomcat,只需一个 jar 包直接根据 jsp 源文件渲染得到 html 页面. 背景 说到模板引擎,大家能想到的一般都是 freemarker.thymeleaf 之类的 ...

  5. vue 加载页面时触发时间_详解Vue.js在页面加载时执行某个方法

    详解Vue.js在页面加载时执行某个方法 jQuery中可以这样写 vue中,如果要达到相同效果,可以使用vue的生命周期函数,如create或者mounted 附上vue.js的生命周期函数执行流程 ...

  6. sleep期间读取所有_如何保障“双11”期间亿万买家和卖家愉快地聊天

    导读:钉钉 IM 存储架构.表格存储 Tablestore 为了满足迁移在稳定性.功能.性能上做的一系列工作. 作者 | 阿里云存储 背景 又一届亿万买家和卖家参与的"双 11"落 ...

  7. vs 输入代码时出现火花_vscode 火花_火花监控如何每天处理10B请求

    vscode 火花_火花监控如何每天处理10B请求 vscode 火花_火花监控:如何每天处理10B请求 vscode 火花 Taboola的Spark监视架构可处理每日10B +的用户事件 他们说独 ...

  8. python selenium截图_利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)...

    对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...

  9. 用python画猪_用Python画一只丑丑的猪头

    前两天在知乎上看到有人用Python的turtle库画了一只小猪佩奇,接着就有网友用turtle画了一只哆啦A梦,不得不说他们都是人才,画得有模有样的.知乎地址在这里: https://www.zhi ...

最新文章

  1. Oracle Mutex 机制 说明
  2. 设置KMPlayer的音量控制的快捷键
  3. mysql 安装 注意点
  4. 简单点亮发光二极管实例(位操作)
  5. CentOS 编译安装python3.6
  6. jsch设置代理_尽管在JSch中设置了STRICT_HOST_CHECKING,但仍获取UnknownHostKey异常
  7. Predicate接口练习之筛选满足条件数据
  8. java类加载过程_面试官:java类的加载过程
  9. 比赛一买香蕉问题---解题报告
  10. 2017.9.27 青蛙的约会 失败总结
  11. 玩具脚本-----yum源
  12. spring boot面试_Spring Boot面试问题
  13. 如何保证API接口数据安全?
  14. 数据库连接参数设置,用户登录,密码修改,权限设置,金蝶KIS旗舰版安卓盘点机PDA
  15. 刻录linux-iso至u盘工具,ISO USB刻录工具ISO to USB burning tool V1.5 完美版
  16. VUE仿知乎网站(四)登录注册页面开发+表单验证
  17. matplotlib柱状图之子柱状图不同颜色—20种颜色列表
  18. 运放电路增益计算公式
  19. USGS下载LANDSAT5 2级别 影像问题
  20. 如何利用Python实现自动打卡签到

热门文章

  1. 改善C#公共程序类库质量的10种方法
  2. Cut Curve randomly
  3. [转载] Python程序将十进制转换为二进制,八进制和十六进制
  4. [转载] pandas中Series数组创建方法
  5. Could not find resource——mybatis 找不到映射器xml文件
  6. RouterOS安装以及搭建DHCP PPPoE PPTP L2TP服务
  7. Mac OS 10.12 - 如何关闭Rootless机制?
  8. POJ-2078 Matrix,暴力枚举!
  9. 关于Jquery.Data()和HTML标签的data-*属性
  10. MyBatis 【返回自增id】