2012-04-16 15 views
8

Tôi nhận được lỗi được đề cập dưới đây trong khi tải trang JSF. Trang được tải thành công và thao tác mong muốn trên trang cũng được thực hiện nhưng lỗi này xuất hiện.javax.faces.FacesException: Lỗi giải mã dữ liệu tài nguyên trong khi tải trang JSF

Trang jsf chứa các tab tab và khi nhấp vào từng bảng điều khiển tab, lỗi xuất hiện. Ngoài ra tôi thấy rằng nếu tôi giữ một phần nhất định của trang của tôi như là rendered = false thì lỗi không đến nhưng phần lại không được hiển thị lại.

Tôi đang sử dụng JSF2.0 với JSP. và RF3.3

ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception 
javax.faces.FacesException: Error decode resource data 
at org.ajax4jsf.resource.ResourceBuilderImpl.decrypt(ResourceBuilderImpl.java:627) 
at org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(ResourceBuilderImpl.java:371) 
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:156) 
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:141) 
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:508) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: java.util.zip.DataFormatException: incorrect data check 
at java.util.zip.Inflater.inflateBytes(Native Method) 
at java.util.zip.Inflater.inflate(Inflater.java:238) 
at java.util.zip.Inflater.inflate(Inflater.java:256) 
at org.ajax4jsf.resource.ResourceBuilderImpl.decrypt(ResourceBuilderImpl.java:621) 
    ... 25 more 

Đoạn mã của trang và thành phần jsf khi được hiển thị = sai trong đậu không ném lỗi được đề cập ở trên.

<rich:tab ignoreDupResponses="true" id="tabModify" 
    style="overflow:auto" styleClass="richTab" label="#{}" 
    eventsQueue="queueForTab" actionListener="#{}"> 
    <rich:layout> 
     <rich:layoutPanel position="right" id="pnlmodfy"> 
      <h:form id="frmModify"> 
       <h:panelGrid> 
        <h:outputLabel value="#{} * :" escape="false" styleClass="intro" /> 
        <h:outputText value=" : " styleClass="intro" /> 
        <rich:comboBox id="Mdfy" value="#{Bean.str}" 
         suggestionValues="#{Bean.arraylist}"> 
         <a4j:support id="id" 
          actionListener="#{Bean.actionListener}" 
          ajaxSingle="true" event="onchange" reRender="modify"> 
         </a4j:support> 
        </rich:comboBox> 
       </h:panelGrid> 
       <a4j:outputPanel id="modify" ajaxRendered="true"> 
        <h:panelGrid columns="3" id="modify"> 
         <h:outputText value="Description *" styleClass="intro"/> 
         <h:outputText value=" : " styleClass="intro" /> 
         <h:inputTextarea id="Desc" required="true" 
          styleClass="textBox" label="Description" 
          value="#{Bean.strDesc}"> 
         </h:inputTextarea> 

Nếu đầu raPanel được liên kết để sao lưu bean để hiển thị và giá trị được đặt thành sai thì lỗi sẽ không đến. Tuy nhiên khi kết xuất lại đầu raPanel, outputPanel không bao giờ xuất hiện.

Vấn đề cơ bản xuất hiện trên bao gồm thành phần. Tôi có 4 tab trong trang. Trên hai tab tôi đang sử dụng listshuttle (2 thành phần trên mỗi tab). Trên cả hai tab, danh sách mảng nguồn và đích được liên kết với listshuttle đều giống nhau.

Có phải do này mà tôi đang ràng buộc cùng một danh sách cho cả shuttles.However cùng mã trong một tab khác làm việc hoàn toàn tốt .... đang

ListShuttle: -

<h:outputText value="Select" styleClass="intro" rendered="#{!empty Bean.lstAvailable}"/> 
<h:outputText value=" : " styleClass="intro" /> 
<rich:listShuttle id="listShuttleN" sourceValue="#{Bean.lstAvailable}" targetValue="#{KPIManagement.lstSelected}" var="items" listsHeight="100" sourceListWidth="100" targetListWidth="100" sourceCaptionLabel="Available" targetCaptionLabel="Selected" rendered="#{!empty Bean.lstAvailable}">  
<rich:column> 
<h:outputLabel value="#{items}"></h:outputLabel> 
</rich:column> 
</rich:listShuttle> 

đang ArrayList: -

ArrayList<String> lstAvailable=new ArrayList<String>(); 

Bên trong một số chức năng

lstAvailable=class.function(Some variable)) 
this.setLstAvailable(lstAvailable); 

Câu trả lời có thể cho bài đăng này là quan sát là tôi đang phải đối mặt với một số loại vấn đề trình duyệt ..

Khi cùng một ứng dụng được truy cập từ máy khác hoàn toàn không có ngoại lệ ... Đây là kỳ lạ vì tôi đang sử dụng Firefox 11.0 và một máy khác có Firefox 4.0

Đây có thực sự là vấn đề với trình duyệt không ??

Trả lời

13

Sự cố hiện đang diễn ra rất nổi bật trên tất cả các bản nâng cấp của Firefox> 10.0 .. Có một số thay đổi trong tập lệnh trình duyệt Firefox không cho phép đọc chính xác cây.

Vui lòng thêm những điều sau đây trong dự án của bạn để loại bỏ tất cả các vấn đề liên quan đến trình duyệt Firefox: -

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper; 

public class RichFacesFirefox11Filter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) { 
      @Override 
      public String getRequestURI() { 
       try { 
        return URLDecoder.decode(super.getRequestURI(), "UTF-8"); 
       } catch (UnsupportedEncodingException e) { 

        throw new IllegalStateException("Cannot decode request URI.", e); 
       } 
      } 
     }, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     // do nothing 
    } 

    @Override 
    public void destroy() { 
     // do nothing 
    } 

} 

Và hãy sự xâm nhập của bộ lọc này trong tập tin web.xml của bạn cũng.

<filter> 
    <filter-name>RichFacesFirefox11Filter</filter-name> 
    <filter-class>Packagename.RichFacesFirefox11Filter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>RichFacesFirefox11Filter</filter-name> 
    <url-pattern>/a4j/*</url-pattern> 
    </filter-mapping> 

Điều này chắc chắn sẽ loại bỏ mọi sự cố liên quan đến trình duyệt Firefox và RichFaces.

+1

Đây là vấn đề JIRA có liên quan từ jboss: https://issues.jboss.org/browse/RF-12062 –

+1

Ngoài ra tôi khuyên bạn nên thực hiện kiểm tra phiên bản FF trong bộ lọc (không thể dán mã trong một hợp lý dưới dạng bình luận, nhưng nó đơn giản như phù hợp với một "Firefox/(\\ d +) \\. \\ d +" regex). –

+0

Sự cố dường như là các ký tự như '!' được chuyển đổi bởi firefox thành '% 21', bộ lọc được đề xuất trong giải pháp này sẽ chuyển đổi% 21 trở lại thành '!' vì vậy tài nguyên có thể được tìm thấy trong máy chủ. Ngoài ra, hãy lưu ý rằng url-pattern có thể cần được thay đổi nếu url cơ sở của bạn chứa các đường con như spring/a4j/* chẳng hạn. – ollbap

0

Đầu tiên, <rich:tabPanel> kết thúc tốt đẹp mỗi <rich:tab> phải nằm trong một số form (kiểm tra ghi chú trong tài liệu), do đó biểu mẫu bên trong tab không cần thiết. Ngoài ra, nếu bạn muốn gọi hành động máy chủ khi bạn nhấp vào một số tab, bạn nên kiểm tra xem switchType có giá trị server hay không.

Một điều nữa, có thể mã XHTML của bạn bên trong <a4j:outputPanel> chứa lỗi, sẽ tốt hơn nếu bạn cập nhật bài đăng của mình với đầy đủ hoặc nhiều mã đó.

+1

Tôi cần bao gồm từ bên trong tab. Tôi không nghĩ rằng biểu mẫu đang gây ra bất kỳ loại vấn đề. Đối với , ngay cả khi loại bỏ lỗi này, lỗi vẫn xuất hiện. Vui lòng đọc bản chỉnh sửa của tôi vì tôi nghĩ rằng vấn đề là với listshuttle. IF listshuttle được trả về false khi tải trang, ngoại lệ không đến. Ngay sau khi đưa đón danh sách được trả lại, ngoại lệ xuất hiện. – AngelsandDemons

1

Tôi không nghi ngờ câu trả lời của AnglesAndDemons là đúng ở đây, nhưng vì một lý do nào đó tôi không thể làm cho nó hoạt động. Tôi đang sử dụng Richfaces 3.3.3 Final và những gì đã hoạt động, đã tải xuống richfaces-impl.jar đã được vá từ vấn đề JIRA https://issues.jboss.org/browse/RF-12062

Các vấn đề liên quan