2017-10-24 15 views
0

私はクエリー文書の選択を可能にするXPageを持っています。内部にあるフルテキストクエリは、データベースからドキュメントを検索し、計算を行い、それらを画面上のビューとして表示します。また、screenにrequestScope.showExcel = trueを設定し、データをExcelに直接ダウンロードするためのリロードを行います(.setHeader( "Content-disposition"、 "inline; myfile.xls")を使用)。これはtrタグとtdタグを持つ単純なテーブルではありません。これまでのところ良いです。XPageのheadセクションにスタイルタグを置く必要があり、出力はExcelに出力されます

カラムごとにカラムのプロパティ(高さ、幅、色)を設定できます。

これらのプロパティは、1つのことを除いてすべて動作します:Excelと、それ以外のものは、検索結果の一部ではなく別のドキュメントです。 OpenOfficeやLibreOffice Calcは、本文のスタイルセクションが気に入らないので、出力を保存してスタイルをヘッドセクションに移動すると、 Excelでファイルが正常に読み込まれます。

私は計算されたスタイリングをヘッドセクションに入れました。計算されたコンテンツパラメータでstyleSheetリソースが見つかりました。私が入れたCSSの一部を生成しますが、すべてではありません。結論として、内容は動的にではなく、負荷で計算されます。上記のボタンはページの完全なリフレッシュを行い、スタイルも更新されると思いました。

悲しいかな、スタイルシートの内容は修正されているようです。

私の質問は:

  • は、ページがリロードされたときに、それが再計算されるように、インラインCSSは、動的な方法でヘッド部でのスタイルのセクションに入れることができるような方法(フルアップデートがあります)?

  • ヘッドセクションに任意のコンテンツを追加できるようなコントロールがありますか?

  • また、動的にヘッドセクションを適応させる方法はありますか?

ありがとうございました!

+0

自分で使ったことはありませんが、 'xp:headTag'タグを見てください。ここの例:http://hasselba.ch/blog/?p=1181 –

+0

@MarkLeusinkありがとう。それを試してみましたが、コンテンツを許可していません(または設定方法がわかりません)。私はもう一度やり直します。 –

答えて

3

ちょうどあなたのヘッダーのリソースのための独自のレンダラを作成:レンダラを有効にするには

package ch.hasselba.xpages.renderkit; 

import com.ibm.commons.util.StringUtil; 
import com.ibm.xsp.complex.Parameter; 
import com.ibm.xsp.render.ResourceRenderer; 
import com.ibm.xsp.resource.GenericHeadResource; 
import com.ibm.xsp.resource.Resource; 
import com.ibm.xsp.util.JSUtil; 
import java.io.IOException; 
import java.util.List; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.context.ResponseWriter; 

public class GenericHeadResourceRenderer extends ResourceRenderer { 
    public void encodeResource(FacesContext fc, UIComponent uiComponent, 
      Resource res) throws IOException { 
     GenericHeadResource headRes = (GenericHeadResource) res; 
     ResponseWriter rw = fc.getResponseWriter(); 

     String tagName = headRes.getTagName(); 
     if (StringUtil.isNotEmpty(tagName)) { 

      rw.startElement(tagName, uiComponent); 

      List<Parameter> params = headRes.getAttributes(); 
      if (params != null) { 
       for (Parameter param : params) { 
        String name = param.getName(); 
        if (StringUtil.isNotEmpty(name)) { 
         String value = param.getValue(); 
         if (value == null) { 
          value = ""; 
         } 
         if("content".equals(name)){ 
          rw.write(value); 
         }else{ 
          rw.writeAttribute(name, value, name); 
         } 
        } 
       } 
      } 
      rw.endElement(tagName); 
      JSUtil.writeln(rw); 
     } 
    } 
} 

を、あなたはのfaces-config.xmlにで既存のものを上書きする必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="1.2" 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_1_2.xsd"> 

    <render-kit> 
     <renderer> 
      <component-family>com.ibm.xsp.resource.Resource</component-family> 
      <renderer-type>com.ibm.xsp.resource.GenericHead</renderer-type> 
      <renderer-class>ch.hasselba.xpages.renderkit.GenericHeadResourceRenderer</renderer-class> 
     </renderer> 
    </render-kit> 

</faces-config> 

次に、「コンテンツの内容が」のパラメータに必要な動的コンテンツを追加します。

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 

    <xp:this.resources> 
     <xp:headTag tagName="style"> 
      <xp:this.attributes> 
       <xp:parameter name="type" value="text/css" /> 
       <xp:parameter name="content" 
        value="#{javascript:java.lang.System.currentTimeMillis()}" /> 
      </xp:this.attributes> 
     </xp:headTag> 
    </xp:this.resources> 

</xp:view> 
+0

良い主よ、それは動作します!私は決して自分自身を見つけたことがないので、幸せ、驚き、畏敬の念で、また悲しいこともあります。今私はExcelファイルで必要としないすべての道場関連の迷惑メールの生成を無効にする何かを見つけなければなりません... Vielen Dank !! –

関連する問題