{"id":1414,"date":"2014-03-14T11:58:35","date_gmt":"2014-03-14T09:58:35","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=1414"},"modified":"2014-03-14T11:59:08","modified_gmt":"2014-03-14T09:59:08","slug":"xpages-set-a-theme-for-a-single-xpage","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=1414","title":{"rendered":"XPages: Set a Theme for a single XPage"},"content":{"rendered":"<h1>&#8230; or how you can use your own FacesContext implementation.<\/h1>\n<p>What we need first is our own FacesContext implementation with new methods to set the <em>StlyeKitId<\/em> (which is the name of the Theme) for initializing the <em>StyleKit<\/em> instance:<\/p>\n<pre><code>package ch.hasselba.xpages;\r\n\r\nimport javax.faces.context.FacesContext;\r\nimport com.ibm.xsp.application.ApplicationExImpl;\r\nimport com.ibm.xsp.context.FacesContextExImpl;\r\nimport com.ibm.xsp.stylekit.StyleKit;\r\n\r\n\/**\r\n\u00a0* ThemeSwitcherFacesContext\r\n\u00a0* allows to switch the theme during runtime\r\n\u00a0* \r\n\u00a0* @author Sven Hasselbach\r\n\u00a0* @version 0.1\r\n\u00a0*\/\r\npublic class ThemeSwitcherFacesContext extends FacesContextExImpl {\r\n\r\n\u00a0\u00a0\u00a0 private StyleKit styleKit;\r\n\u00a0\u00a0\u00a0 private String styleKitId;\r\n\u00a0\u00a0\u00a0 private FacesContext delegated;\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * constructor\r\n\u00a0\u00a0\u00a0\u00a0 * \r\n\u00a0\u00a0\u00a0\u00a0 * @param fc\r\n\u00a0\u00a0\u00a0\u00a0 * \u00a0\u00a0 \u00a0delegated javax.faces.context.FacesContext\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public ThemeSwitcherFacesContext(FacesContext fc) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 super(fc);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.delegated = fc;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * returns current StyleKit\r\n\u00a0\u00a0 \u00a0 * \r\n\u00a0\u00a0\u00a0\u00a0 * @return com.ibm.xsp.stylekit.StyleKit\r\n\u00a0\u00a0\u00a0\u00a0 *\u00a0\u00a0\u00a0\u00a0\u00a0 the StyleKit used for rendering the view\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public StyleKit getStyleKit() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (this.styleKit == null) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.styleKit = super.getStyleKit();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return this.styleKit;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * sets the StyleKit\r\n\u00a0\u00a0\u00a0\u00a0 * \r\n\u00a0\u00a0\u00a0\u00a0 * @param stlyeKit\r\n\u00a0\u00a0\u00a0\u00a0 *\u00a0\u00a0\u00a0\u00a0 the com.ibm.xsp.stylekit.StyleKit to use \r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public void setStyleKit(final StyleKit styleKit) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.styleKit = styleKit;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * returns the current StyleKitId (aka Theme name)\r\n\u00a0\u00a0\u00a0\u00a0 * \r\n\u00a0\u00a0\u00a0\u00a0 * @return String\r\n\u00a0\u00a0\u00a0\u00a0 *\u00a0\u00a0\u00a0\u00a0 the id of the StyleKit\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0 public String getStyleKitId() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (this.styleKitId == null) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.styleKitId = super.getStyleKitId();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return styleKitId;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * sets the StyleKitId\r\n\u00a0\u00a0\u00a0\u00a0 * \r\n\u00a0\u00a0\u00a0\u00a0 * @param styleKitId\r\n\u00a0\u00a0\u00a0\u00a0 *\u00a0\u00a0\u00a0\u00a0 the id of the StyleKit\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public void setStyleKitId(final String styleKitId) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.styleKitId = styleKitId;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * initializes the StyleKit for the current view\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public void loadStyleKit() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.styleKit = ((ApplicationExImpl) getApplication())\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .getStyleKit(this.styleKitId);\r\n\u00a0\u00a0\u00a0 }\r\n}<\/code><\/pre>\n<p>But you cannot register the <em>FacesContext<\/em> implementation directly. That&#8217;s why we have to build our own <em>FacesContextFactory<\/em> to inject our <em>FacesContext<\/em> instance this:<\/p>\n<pre><code>package ch.hasselba.xpages;\r\n\r\nimport javax.faces.FacesException;\r\nimport javax.faces.context.FacesContext;\r\nimport javax.faces.context.FacesContextFactory;\r\nimport javax.faces.lifecycle.Lifecycle;\r\nimport com.ibm.xsp.FacesExceptionEx;\r\nimport com.ibm.xsp.context.FacesContextFactoryImpl;\r\n\r\n\/**\r\n\u00a0* ThemeSwitcherFacesContextFactory\r\n\u00a0* \r\n\u00a0* @author Sven Hasselbach\r\n\u00a0* @version 0.1\r\n\u00a0*\/\r\npublic class ThemeSwitcherFacesContextFactory extends FacesContextFactory {\r\n\r\n\u00a0\u00a0 \u00a0private FacesContextFactory delegate;\r\n\r\n\u00a0\u00a0 \u00a0@SuppressWarnings(\"unchecked\")\r\n\u00a0\u00a0 \u00a0public ThemeSwitcherFacesContextFactory(){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0try{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Class clazz = Class.forName( \"com.sun.faces.context.FacesContextFactoryImpl\" );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 this.delegate = (FacesContextFactory) clazz.newInstance();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 catch (Exception e){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new FacesExceptionEx(e);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0public ThemeSwitcherFacesContextFactory(FacesContextFactory fcFactory){\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0this.delegate = fcFactory;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ((this.delegate instanceof FacesContextFactoryImpl)) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0this.delegate = ((FacesContextFactoryImpl)this.delegate).getDelegate();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0public FacesContext getFacesContext(Object param1, Object param2, \r\n        Object param3, Lifecycle paramLC) throws FacesException {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0FacesContext fc = this.delegate.getFacesContext(param1, param2, param3, paramLC);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return new ThemeSwitcherFacesContext(fc);\r\n\u00a0\u00a0 \u00a0}\r\n}<\/code><\/pre>\n<p>Now, you have to add the <em>FacesContextFactory<\/em> to the <em>faces-config.xml<\/em> to activate it:<em><br \/>\n<\/em><\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;faces-config&gt;\r\n\u00a0 &lt;factory&gt;\r\n\u00a0\u00a0\u00a0 &lt;faces-context-factory&gt;\r\n        ch.hasselba.xpages.ThemeSwitcherFacesContextFactory\r\n    &lt;\/faces-context-factory&gt;\r\n\u00a0 &lt;\/factory&gt;\r\n&lt;\/faces-config&gt;<\/code><\/pre>\n<p>If you open the XPage, an error will occur:<\/p>\n<p><img decoding=\"async\" alt=\"\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAACKCAIAAAAVLrthAAARLklEQVR4nO3da3faVr4GcH1Butpv4Q\/BTPJ2Vjw905k0aXAcwIDF1dwSO47HNjYGA7ZB3JFt7BKnzSHHzrCay5omaZkXnNGSJe2tjbi5289vZXUZsbX13xv0WBIyFb76+ps7d+7MAXDtzp07X339zVdff\/PTTz\/9CLeAcA4AwB3hDACAO0IbAIA7Q0Tb8clJUarsZgsbqb1nG6mnL1JPX6SebaQ2Unu72XxRqhyfnEyuUAAAdsIpg1q9kdrLJda3drOFaqPZPjvrvHz58uLi5cVF5+XL9tlZtdHczRYS61s7mXy90WTpEwBgcoQTqlZLTmcLyfXtYrna6XQuqDqdzpFUSa5vp7MFWZbpPQMATI5wTFar11c3Upn84fn5jy+ZnZ2f7+0fPN\/caTRblM4BACZHkAnKlerT9a1KrdGxpFJrJJ9v\/unPd+4CAEyd0DJSqVYTa5v1RnOUW+Zq9eZu7ujT5y99AIDpEpo6tXo9ub55VCqPftfcUalcrLZ+++33WQ8TAG4Xg2jb3s3uZvL0zFIOzUzTLVs4unj9ZtbDBIDbRWhcJ5XL0Wcbx8cnlNt8z8\/PJany\/aNFnz98etqm3xN8fHy8Vyj9+unzrEcKALeIUL\/un6n0fuGIciPc2dlZSSo\/cDh\/eLz0wOFcDkTOzs7o984dFKXOq\/8lVfDx48d6vb61tZVMJpPJ5NbWVr1e\/\/jx4zRnAQA4I9RUypVKOLHWkmXKjXBSufLA4Vxwet2+4BOP+GRpud1u0++da7Xk7GH5y2+\/6Tf\/6tWrp0+fZrPZYrHYaDSKxWK73Y7H48lk8uLiYvrTAQB8EKoqe9nc+tYO6T6Rk5OTkiQ9fOxacPmWxLBHjLh8IalcOTk5Mb3HJH9Uftv7RbPti4uLtbW1N2\/evHv3rlQqJZPJRCKRyWSi0WgymYzFYvR0EwRB83CAsmSaq5MaC9cZLlHcvXt38F819VNjpOmf3nLEBkOtfjsnAUYkVFTWN1N7+wXD29yOj49LkvRgwelwepfE8JIYdi+HJKlycnJCujNO7UiqdH66dk764cOHeDx+dXX15cuXz58\/\/\/LLL+l0OvJfa2tr5XI5Fot9+PDBoGijGNL8THp2OqtTGmuepS9R7x6GO\/y4UDbEsgr7Uxa6vYWTAKO7Fm3x1Y1iqWyYa5JUfuBwOlzeJX\/YG1jxBVdKUpl0jKbvoVpvNE9\/VG+4XC5vb29\/+vTp06dPV1dXkUgkdF2lUolEIuVymVg6W7gYLhlqlaFWN208VJ0z2atHX4WDaBt9FUTbbAlllWBstVqtaW7flWW5WCw9cPz\/8ZovGPUGVpy+4IMF1\/\/cf\/TX7x7+9bsHg3\/3\/va90yPKsqy\/B7hWr0uNE\/WGV1dXj46OLi4uyuVyPB4P6Kyvr5+fn6+urhJL5z3a6Lux+jRNvVBzvqY8NG2pr1D\/rNKVpkPD3gzP7CjF6H\/mexI0P+j7MawHGAmSin8l2Wg0NLe5tVqtR0+WHE6vxx\/xhaKDf55AxOULPvH41f8eu8XvHzlbrZb+Xrlms1msyeoN+\/3+Z8+exWIx0UgikWi325eXl36\/n1g64dRPv9x0dcN1h7p8Rt8cS9rSD9kMHxrubIZLTFv2dXum6eqGiWC4wzOWra+N40lgnAGkm2VCSUWMJGq1muZOt2azuehedvlCvmCM\/s8bWHG4fM1ms6FzfHysjzafSiAQ8Pl8sVgsHo\/7fL5arfb+\/fvXr1+LokgsfcjQYWxmeq2NZXXTUoc9ZNMvIe1L6p2TsltSDg0o+7DpXk2qjf4UqT2vk6Bs3bQxos0yoajiX3laLEm16xqNxuFh0b0c8gajy+H44J83GHWLEddySP3viTcghmKNRqOm0zo+1pyQJhIJj8fj8Xj29vaq1er5+fnz589zuVw4HPZ4PM1m89WrV6VSKZFIEEs3izZKrvVnGm0WDtn0Swz3atIqlOMCvelHG6k3Xiehr4s2UleINsuEI5WV5NpeNlfVqdfrh0dFtxj2BqLLofhyKLYcihVLkv6sc5Br+h7kk7bmY4TDw0O3272xsfH27dter9fr9X7++ef19XW32+12uz0ez+Dng4MDYunM2TTi6tOPNsM39FB7tekBi+m6lJ8pezW9N5YiKWExVG+UDm\/OJNBnQL8isBMOVZ4+31h9sVkxUqvVCoeHruWwNxj1hWIuX9DxxFsoHFSrVcP2GvXjtubmj\/fv33s8HqfTWalU3v5XqVQKBAJOp9Pr9QaDQY\/H8\/79e2Lp1NsshOsM21NWN+xwqK3TG9PHYm2v7qtOsvTL6S0Nl1C2wrjdPkMEKKuTOud4EkgzYFgGDOVatG2ldn3hOCmearVa4eDQLYa9wZg3GHW4lu8\/epLL5U3TTZblw2pLf8tuu91eXFz0+\/2Xl5dXV1dXV1dv3rzx+Xyrq6vPnz93u93tdnsmkwIwQ0i0sRAOVPL5gkuMHBweSgSVSiVfOHCL4eVQ3BeMLbiWHy64KpUKqf1A983\/5Up1w682Oj09dTqd0Wg0l8tlMplIJBKNRmOxmNPpPD09nf50AMwcom0shMJ18WfrwejTElm5XM7lCy4x7AvFXcthXyBSLpcp7VutVqXV\/vHVa1IF7969y+fzoVBocXFxcXExFArl8\/l3795NcxYAgDNC\/rq9TOaRW8xkc0UySZKyuZxrORRYSQzyi9SyXC5fXv1rtyD9+9dfZz1SALhFhJxOYnXdLUYODw+PyAaHb5IkFYtFSrPLy8t8qf7yZ3wVJQBMlbCvk81ml\/yRwEryYGTVVrtYk3\/\/HV8gDgBTJWSNpPf2HG5\/cu1FYQTJ1Rd7B5XPX\/C\/fQGAaRMyBFvbqX8seDyBlVwulx9SLpfzBFb+seCx\/+nPdwEApo4YbZlMZjedfuwJLCwFUjtp\/SU5ktRO2uH2L3oDu+k0pXMAgMkR9qjS6bQYjn370Lnkj+zspvUX5tR2dtNuMfLtQ6cYiqXTaXrPAACTI6QZbG1vP\/EG791\/\/P2idzkUW13f2E7t7GUye5nMdmpndX1jORS7\/9hz7\/7jJ97AP7e2WfoEAJgcYZfZdmontJJwuMXvfnDdu\/\/4L39f+MvfF+7df\/y3H1wOtxiOJrdTKfbeAAAmR9gBAOCOkAIA4I4w649oAQDGz+T7GgEA\/ogQbQDAIUQbAHAI0QYAHEK0AQCHEG0AwCFEGwBwCNEGABxCtAEAhxBtAMAhRBsAcAjRBgAcQrQBAIcQbQDAIUQbAHAI0QYAHEK0AQCHaNEmDG9qdc+cKIr0IUuSZLfbB23sdrskSZTeOp2Ow+GYm5tT2m9ubk6gaoDbwjyMlH3YML+63a66wcTqvFkkSaIPeRBqdrvd8KHG\/Py84e+Jubm5brc7qTEAcI0pjEwPzZRdfdzl3UTdbtdms1FmQzlYU47UZFlWDsf0jZUDNFmW1T0LgjA\/Pz\/RsQDwajzR1u\/3HQ7HLYk2JbkMZ2Nzc1N5qtPpDBZ2u11lofpM0+FwaE48O50Oy2wDAN3Yom1wYDLW2m4i+ul5v98nHdApC202m7Kw1+vpN4GjNoDRjRpt6ofcR5skSfRoU048KdEmCIIsy6RNqI\/vHA7HpEYCwLuRom1w9jSx2m6Wbrc7OIaiRJv6bJQSbYlEgrQVu91us9lEUVROZgHAgpGibX9\/nxJtgs5guSzLg88EbTbb4EI7e8uBTqcjiqJyq8Tc3FwikdCf3A3bLd38\/Pzg80pKtGk+6yQVoz\/N7PV6+\/v7yogcDgeiDWAUI0XbYFckraU+t1JW1JzQzc3NDdVSvdxutw\/iTLmur7kkP1S3dKIoKiFIiTYlm+jRpr7cZtjnAE5IASyzGG29Xm\/wkahAPSHVrCjLcrfbHRzrafZ\/xpaJREJ5qL+1QtCd67EXQDG4xEaZjRGfGsyn\/iqeQL4VDgDorEQbfS+lrKgcVSnHWcpBE0tLzY0R6lM29XL1mSl7ASTKJTZSn6M\/peh0Opr72gTdoSgAsLB41NbtdpV0YF9RfZ\/X3NyczWZT7rZnaak5riFtiHKERSmARLnERpmNEZ9S03zGKjCfMgOA2kjX2gaHGBZWtNaS8UqWOgvYCzCkvsTG0qfmmIu0lv5am5r+766GLRsARoq2wZUvCytaa0lpQ3pqxIwQmA3aW\/6EVE1\/4DZs2QAw\/vvaGK+4M26CsQ3pqREzQh9hJIP26k85KBVS7mvTN8YnCQAWjPOvEfr9fq\/XU++K7MnC0nL6J6SULDPsefS\/RtA3Ns1BANAb29+QDoiiqD7bYl+RpeXoHyOwDNYUvU\/2vyEdfF2KulrDTRj+nSkA0I0z2gbnp+qbFcYbbb1ez3CfZ7wpZDrRZvjNH+q1lPlRQlBzyqn+Mrj9\/f2x1Axw24wt2pR7stR743ijrX89OJTTOvZbdlkGa8q0T8bva1Mf39nt9kEOqm9tMzygAwAWVr5lV3MTqSzL6jaGX1KmeUqDvWVfdale\/4dWmlwbqlt2LHHJ8i27mr+lV7PZbDheAxjFEEdSjJTzRMNn2TdEKUz\/5\/GGX5UxbLeMGDvc3983\/X8jyLLscDiUwzSbzTY\/P49QAxgd7pkCAA4h2gCAQ4g2AOAQog0AOIRoAwAOIdoAgEOINgDgEKINADiEaAMADiHaAIBDiDYA4BCiDQA4hGgDAA4h2gCAQ4g2AOAQog0AOIRoAwAOIdoAgEOINgDgEKINADiEaAMADiHaAIBDiDYA4BCiDQA4hGgDAA4h2gCAQ4g2AOAQog0AOIRoAwAOIdoAgEOINgDgEKINADiEaAMADhGjTbhOv2RcTLeuf2i4RN8D6xRc3xDjWmNnYYzTr429\/USX30xTe7EMN3GT52omtZlsUl+TesczbKZ5dQ1\/JjWgb53+UPMU42xSKp8J9jFODeOLpW4zVNmk9jfh5WA37CyNsqE\/0LTM0OyjzXArLM3oLzDjTmhhrYma2h7CzkIZw64yoaO2aU7gpLd1A98YdDMv0nq0mS5kb8+4+hSi7SYg\/QKYFUTbTdgWom3oAkyevknR1ifv9vrLHILqIh2pc3oDep\/qZzUtTYthCWXDmScdHVseBamNfnXSpikDJDXT98OyfNiXmLFyyigMezNsPK5ZYhyLYZ30uTLscCxjN2xjWLC1rVtmHm2UF09TGakH+kL6YEjvFcqLSm9M2orhXKt\/Jr3A+u2armjK8O1F2ajhKqOMglKMvhLDPknNDPsZ6hU0HIi1yjXPsr\/B6NNouC19\/\/qHjGPRNyZNuL4fxtosj32o191066Mw3+dNl9Crob+NWIahTGif8LIJ1xlul31D1vrUv06jvFr04k3fgoYdUkZBfzkoW2GcbcN381D9mM6q5coZy7b2ZmAc3ShjMZ1bSj8stQ31fjZ9dUZ\/J7ObWbQx1HatsWYWhnorsG+R\/uKRZmPYYtjLoD9keUMo7zbGGKIXM8NoG6ow9sqHKpulMXs\/E4q2\/vWIYSx7lLGrt4houxHRRhkdH9E21NuLpRhEG0uHM482C2WPfeyINiaMe05\/yMnS\/HKz\/O6xsCIdY+aqFxr+otY0MOzc8i8JxuBgmRzD8tTLrb3EmnVNXw7SLA21l7IXaSHaWGaDZZiGGx197PpOLLx8E4824TrDJaSFlKco7WlVmv3KpRdA75bUjFQ5vTaWFekl0efTsD2pT3U\/LK8UvR5SJYx9UvohjZSyuuHQSJNDWaJ5ltSGsvW+pVki1W86FsPGLD2Yzoy1sRuWRCrYdGZYimc0noAE4MBY9qg\/KP7Gztt4ACzjb\/dmx9\/YeRsPgDVjPBX6w+Fy7FwNBgBgANEGABxCtAEAhxBtAMAhRBsAcAjRBgAcQrQBAIcQbQDAIUQbAHAI0QYAHEK0AQCHEG0AwCFEGwBwCNEGABz6D87upffNXX22AAAAAElFTkSuQmCC\" \/><\/p>\n<p>This happens because there are some java security restrictions with the class loader of the delegated classes. You have to modify the java security in the <em>java.policy<\/em> file (you can limit the the grant to specific database if you want).<\/p>\n<pre><code>grant {\r\n\u00a0\u00a0\u00a0 permission java.security.AllPermission;\r\n};<\/code><\/pre>\n<p>Then you can add a Theme to your XPage, f.e. this one:<\/p>\n<pre><code>&lt;theme\r\n    extends=\"webstandard\" \r\n    xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" \r\n    xsi:noNamespaceSchemaLocation=\"platform:\/plugin\/com.ibm.designer.domino.stylekits\/schema\/stylekit.xsd\" &gt;\r\n    &lt;control&gt;\r\n        &lt;name&gt;ViewRoot&lt;\/name&gt;\r\n        &lt;property&gt;\r\n            &lt;name&gt;style&lt;\/name&gt;\r\n            &lt;value&gt;background-color:rgb(255,255,0)&lt;\/value&gt;\r\n        &lt;\/property&gt;\r\n    &lt;\/control&gt;\r\n&lt;\/theme&gt;<\/code><\/pre>\n<p>To use the ThemeSwitcher, you have to add some code in the beforePageLoad event:<\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n\r\n\u00a0\u00a0 \u00a0&lt;xp:this.beforePageLoad&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;![CDATA[#{javascript:\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0importPackage( ch.hasselba.xpages );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var fc:ch.hasselba.xpages.ThemeSwitcherFacesContext = facesContext;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fc.setStyleKitId( \"ThemeA\");\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fc.loadStyleKit();}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0]]&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/xp:this.beforePageLoad&gt;\r\n\r\n\u00a0\u00a0 \u00a0Switched Theme\r\n\r\n&lt;\/xp:view&gt;<\/code><\/pre>\n<p>When the XPage is opened in the browser, the Theme is changed:<\/p>\n<p><img decoding=\"async\" alt=\"\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVsAAABlCAIAAABsqtfTAAAWn0lEQVR4nO2de1Bb153Hz8zO7HRndtLZme7szk46\/WM7uzOb7G5np7vT3TZtmjRdN22cd5o0burUjRs7Togd8APM2\/UD\/IAY7BgMQugJQiAhkBAgXhJYEiD0FkKAJOCCwGBT8zDFdtg\/VLSX+zi6Amwp+PeZ7+Bzz\/39fud3j8755QpdFNTS0iIQCC9cvJT7h9Mg0I7UhYuXBAJhS0sLrPaoQmVl5Y2N6kAg8EcA2KEEAoHGRnVZWXlZWXlRUXF7e3svwAI6c\/ZcKBSanZ2dAYAdyuzsbCgUOnP23Jmz57q7u3U6nVarbWpqampq0mq10Ca3UU7uqbm5uXi\/ZADwcJmbm8vJPZWTe0qv12sAdlBO7qnZ2dlpANjRzM7OhitCZ2enGmAH5eSeunnz5hQ7Vqu1paWltbXVbrdjzAAgkbl58yaXiiAUCi9fvlxUVCQWix\/ZJkwoUHZO7szMzCQNnU4XfoOh0+l8Pt\/g4GBzc3O4x2Kx0O0BIF7Q9z\/dZmZmJjsnNzsnt6Ojo5FGcXFxYWFhYWHhtWvXenp69Hp9pKeyspJuv4NBWdk509PTxEY0Go3JZJqcnBwbG7uz+iDXe\/ec7+7SvQd+v9\/n8+l0uv7+fgIA4g2+UpAtp6ens7JzsrJz2tvbGzZSUFBQU1Pj9Xrtdjt5tVsslhs3bpSUlPD5\/IbHBpSZlR0KhSZIBAIBjUazvHr\/ddMfP7DcSXUtIsUsUsye9S59YltIdy+Ojo6q1eoJAIgrmLoQORUxDoVCmVnZmVnZlIqgVCoLCwsxq91isRQUFMRrfz56UGZW9tTU1DgJjUaj0+lG\/riCaqf\/UjGd4byDaqdR7XTe4B1UO\/0XddOLK6tqtVqn041vBCE0vh1Q4pAP6afCYHrwkbfXHWO8CRjnAW1ku8aiD425NEySmzDYHJS6QC8H5NoxPj4+NTUVrghtbW0qEoWFhaWlpfjVXlhYWFxcrNoIQki1HVDikA\/pp8JgevCRubijjMys8LuDMBqNxmg0TkxMrKysdE4t9s0srays1I8tNI4vrKysNI4vdE4trqysBAIBg8HQ2to6RgIhNLaRSA\/9FAaKcfgwkj2jWcQGE+Rhu2OMNwFmMhlH3MpY3Afi4sL91FaI1IXTp08\/9dTTZ8+eDZeDs2fPPvXU06dPnw4XgjBjY2OTk5MZmVkZmVk6na5+nYKCArlc7vV68avdbrdLJJKioqJ6Egih+o1EeuinMFCMw4eRJcRoFrHBBNm0O0rPyCQIIrhOQ0PD2NjYrvYpJA3+dc2YdOT29aFbSBpE0iBv6LZ05Pbf1I4hafCXhpDf729oaAiSQAgFNxLpoZ\/CQDEmH3JpY0bk7hKTe1TjTRBTelscK+rQW3HZ3twiROrC1NTUpYKCHzzzTH5+fn5+\/g+eeeZSQUH4tjdSPoLBIEEQ6RmZ6RmZOp1Ouc7Fixc9Hg+X1W6z2S5evKgkgRBSbiTSQz+FgWJMPuTSxozI3WVD+2R6JkEQgXUaGxuNRmPF4M1vyEaRcPhbtf5sSwgJh5FwONsS+oeaUSQc\/oZstMxz02QyNTc3B0gghMI\/ww1ym9Kg2NCDcDlka7P1xOQSk3tUY7az5HkIsEwdYzTGQ8ZolIAcLTGXQ2mwveh0M8yEM141IkHPh1wUQqFQUXHx7t0v7979clFxcSgUipSDcPkIBAIEQZxMzzyZvqEiXLp0qa6ujstqVyqVly9fpu+ocHqRHkon+RKi7n\/8IVubrScmlw3ttPQMckVwu90qlcput4duzf+VYPAJkTerl0AVHlThCTeeEHlDt+btdrtKpXK5XJQXmHG5MDYC3DZS1EPGRcMYmT463RezBDHJc7kQ+ln8XG1iHtjc8a8F44UwzgzGHfP60nNji8klsQjkijAxMXHl6hf7Pzy474PfFxUXh98v0CtCWnpGWnpGa2urYh2pVHrhwoX29nb8am9vb79w4YJUKlWQCF9XpB35ydigtNk6ox5GwJgx9jP6MkdLTTtJrgiB9aIwOTn5pNj1BN+ZcSOIrtvRdXu48aTYNTk5SS8HbKuBbT0xvsz4dc\/YwyVsVDMuSzCqO8dUMe7c42MmirwPIzCOwmbJGJkchO1n1FQZz3K5arpj5L3D+Pj4+fMXX3vjnUqhmF8pfPGll8\/l5YUrQuQtRiAQIAgiNe1katrJlpaWOhISieT8+fPBYJBttQeDwfPnz0skkrqNIIQo7UgPvUFpM\/ZENcAMHZMZJVtq+0RqGqUiBAIBlUpFEMSTQvsTPGt69ygqsaASS7jxpNBOEIRKpQrQwOyxqIuesSeqAb1\/E\/uQni1bHO7rdYuZRI2PmSj6tbBFZrPEeD3sisAWClMRzp3Le\/6FXeUVlaFQKBQKXSu9\/j\/f\/+GZM2foFeFEatqJ1LTm5ubajeTn5wcCAbbVHggE8vPza2kghCjtSA+9QWkz9kQ1oPezGeBHp2RLbR8\/kcpYEVwu19tq9xOlfSe7fOiKGV0xhxvvatwOh+NhVISo5QDjzmVxx+T+6CsC20blEpzLtXCpCPh5YGxjso06q\/ggXCpCMBgMP48Y+QR9amoq\/Awu+deQgUCAIIjjJ1KPn0jVarXyjeTl5XV3d7OtdoPBkJeXJ6eBEKK0Iz30BqUd9RDvThmODe7uG9rHjp+gV4TW1ta2tjan00kQhNjq\/9pV49euGsVWfygUcjgcOp2ura0tQAOzYsgvcwQ2S7ZFwGhDCUWJj49JcWcMGNPobMbkZDDLncu0cBwLkx5jAz8P+FE4jhugXTubLyUO4wwESEWB\/tkkuRaEIQji2PETx46foFeEwsLC8vJyg8EwNjZGWe0Gg6GsrOzy5csc9xulQb4ENkvGQzYbSihKfHxMijtjQLlcjlKOHqNXhEAg0NraGn5iYWBgIPyYx8DAQLiHsRxwhO3VBQAKXJYK\/hNKsiVBEClHj6UcPdbU1FRDo6CgIC8vLy8vr7W1NXyv0draGu75\/PPP6fYcQQht2jdeoOSUo4wVIYzT6SQ\/z+R0Oh\/BywwAAc5LhUs5CAQCBEEkpxxNTjmq0WiqWeDz+WdJ8Pl8NkuOIIS2GOHRgz5LxlUEANgZEATxWfLRz5KPqtXqKoAddPhIMlQEYMdDEMThI8mHjySrVCoxwA5UBOCxIFIRFApFJcAOSjp8BCoCsOMhCCLp8JGkw0fkcjkPYAftfuVVqAjAjocgiN2vvLr7lVczMzM\/BNhBfgAAgHXQKAAAwDpoBAAAYJ0YKsKQz2ex2rt6zC0dhsaWjobmjobmjsaWjpYOQ1ePyWK1D\/l8Dy9RAAAeAWiYA06Xu8NgrNe2dfWYHW7PyOho+M9Qx8bHg2NjI6OjDrenq8dcr23r7Da53B4uMQEASECQD8vgoFffY1Zp2y02RzAYxH8ZZjAY7LfaVdp2fY\/Z6\/XiIwMAkICgIXacLpe6paPb1Of3B7h\/Jeao32+40duk63R7BjHBAQBIQJCXBZvd0aBtszvd+D8vY8PudKu0bekZmVkAAHx1QINM2B2Oeo3O5fZs5ZkQp8ujN1lW791f2w4cDsfNmze3JRQAAGwgDw2ny6XS6voHbFt\/2qF\/wOb0jj548OXWE717967JZLp\/f3vqCwAAjDBUhPaunq5uE36rR24EohYFs8U2PjWzLblOTEx4vd5tCQUAACPIvRGrzVbX2DI05MM81eT3+61We\/G1MpG0Znh4BP8I1NDQUJ\/d86fVe1FT8fl8e\/fu\/fZT3\/n6333zued+KhKJKAZffvmlxWKZn59\/KDMBAMDaGnJtpLVDf8Pcj3mAYXR0dMBqu1LC++J65ZUSnrhKPjo6in\/mYcDuDE6E8Hn09PR885\/+7V\/+84fH0rN5lcK9+w9+\/e+\/dejQJxSzhYWF3t7eBw8ecLm25eVll8sV+f\/8tbW1uVyu5eXlTU4VADwGICcJm91eU68Z9HoxDzBYbfYrJbxSnpAvqi4XSMorxSMjI\/hnHgYHvX12z332bby8vPz0d7\/\/41+8teuNX7+1Z9\/N2dm1tTWNtuVvv\/nt2to6inH4JiXqhU1MTDQ0NPT09FgsFrfbbbFYRkZGlEqlSqUaHx\/f0pwBwM4FOUgYeozatk62Dyp9Pt+A1Xr1ekVphahSUiOQyCtEMqvN7vP5on7IaXcP3Zq\/w5aESFL138+\/+Ob7B9\/ce+D53W+98NLr4bcGHx9J+fFPf04xfvDggclkWlpawlzV+Pi4RqOZmZlZWFgIf2FsfX19d3d3XV2dSqVSKBT4ooAQohyGwfQ8Snc2Y8qX8zL2RMjKygr\/JEM+tY1Q4uMtt2gQk\/vjOQl4kJ2EVtdhuGFmfDxhaGhowGq9Usor4QkrJTWVkhq+WGa12n0+H9sTDWScHm+QYH3jkJqZ87M39ry7P+nd\/Ulvvn\/wRy++\/tyulxcWFgRi6T8+9R26\/e3bty0WC1u0paUlpVI5Nzd3\/\/79e\/fu3blzR6\/XR76RWqPR2Gw2hULBWFMYdy+lzXb20bhjjCln8T3kVcW4T7YLzEBcXLif2kTYx3ASorKhIijVLZYBG2M5sFptV0p4JRXCSmmNsKpWVF07YLWx3RHQIwwO+TzDAbYkDn6a8uZvD7x\/KGXvoeT3Dh55+3cfP\/vzN17\/1W8E4qp\/\/vfvMrp4vV6CIBhP2Wy29vb21dXV1dXVubk5uVwu24jdbpfL5TabjXVSuO1Jxp6YXGJyj2ocU55x2Qxbd9kBFWHrLg+3IthIVCvUDoeT8rSS1+u1WAaulPz57kBUXSesquWJqq+UVlwqunah8OqFwith5RcU8wQSr9dLf+TJ7fFY3T768MvLy9979vn\/ff1X73+csv9w6geHT\/zu0+Pvf5zyq\/1JP3vj18+++Ppr7+xhzHt1ddVsNq+srNBPqdXq\/v7+8fFxm82mVCrp3zar1Wr9fr9arWadlJ1eEfCrn3wvTe6k3FRHDqNa0jOkn42EogRkjMZ4+41Jht7e2ZNAadDjMOYTBllJSGtVbreb8njC4ODgtfLKEp5QIJWLZHVhCarkFaLqcoGUrOt8SfE13uDgIP0Zh8HBQYuT+VGC3LPn93yYdCAl\/aNjmQePZhxISd9\/JHXfJ8fe\/X3SC7vfqq6h\/mYxwszMjMPhoPdLpdLGxkaFQiFhor6+fmRkZHZ2ViqVsk4Ky\/05vT+qO6NvTL8awA\/HpUjhbxAYDxnXKGNPVMs12oKO6s64kRj3Cce06bnt4EngOANsRQENkJDI651OJ+UJBY\/HU8YXV4hkomoFXsKq2pIKkcfjcdPw+\/2MFcE3MvLau7\/df+REUlpu0sncpLTcj09kHzyasS\/p2Bvv7f\/ocDJj0mEwFUFEoqqqSiQSKRQKpVIpEomcTufi4uLU1JREImGLHOte5WgW9fcIXNyjphrrDQK9h20Jktc0ZjVj\/kOEWfpRNwNbbvhTbPY7dRIio0c1Zq0IFhLS2gbLgNW5Ebfb3ddn4Ytlwuo6cY0yLGF1HV8irxDLyCoXVklkCrfb7aThDwbp7xomJohnd+3ec+DTpJO5n2WePpLxh6STuR8mp7792w\/f++Bg3sWC5bt3GZNeW1u7d++eyWRifNdQX18vEAgEAoHBYHA4HH6\/v6mpyWg01tTUCAQCj8cT\/j\/W1dfXswWPWhEw5WAtrhVhEzcI9B7GzcDmgvmvEJ1HXxHYou3USVijVQS2UKwVoZ9ErUpj6DE6aLhcrr5+C19SI6yqE8uUYplCLFNYBqz0dwfhckCPME5MUX6zODU19dzPX31r30efpOUkZ5\/79OSp5IycT49nHEjC3RdEwPxmsa+vj8\/nt7S03Lp1a35+fn5+fnJyUqvV8vl8Pp8vEAjC7d7eXrbg3Lf0Ft0ffUVgXAcxbYao\/3mM6otpYzYDPhqXJDF7LKZomICJMwn4GaA7RkB9JBqaWtTNOjsTTqfT3NdXIa4RVteJZIoKUXVJudBs7nU4HIz2FHyBcfKnj3Nzcy+89Npr7+3\/6Fjmkcwzx07lf5icquvoHPH7ZbRHkujcvn17YGDgyy+Z\/4BqcXFRIBDweDy73X5rnYGBgaqqKh6PJxQKq6urBQLB4uIiW3z853xoI4z2GHfGgDGNjjfGX8vmNsMa6U6Y3o+3ZOzBjMJx3DUOOyfizhZ8B08C2wwwpkFmQ0Vo6+gS1SjZdrXT6TT39vElNcJqhbC6rqRCXHSt3Gg0RS0Kfr+\/zzEYeUJpfn5+1ytv\/uKX7+\/\/LO2TtNzk7LPH\/3D+1weSQtOc\/iDqwYMHvb29mP28trY2MjJSVlYmlUpnZ2fn5ubm5uZmZmZEIpFarW5qauLz+SMjI1zGAoCdBKYQREC9JEwmc4VE3tvXZ2XBbrebzL18SY1YphRVK0orxFdLK+x2O5t9mIXFJeOAK\/I30bt2v\/6TV9\/eeyj5QEr6geSTew9+umf\/oR\/\/7CWOV8XxKebh4WEej1dXV2c0Gru7u+VyeV1dnUKh4PF4w8PDHMcCgJ0Ep4pg3oiyUVtd1zDAjs1mM5rMFZIakUxZIa4RVcltNhvG3u\/32wdHAhNTkSH\/9b9++M7vDu1LOnYgJf3tfQdiuqSlpSWz2czxL50WFhZMJpNMJisrKysrK5PJZCaTaWFhIaYRAeCxApk2YujuvsaXdPcYLexYrdYeo7FCLKuqrQ9vezZLh8NxZ2Gpy2xd+dOfIkM+\/R\/f2\/XKL3\/x5p6X3\/nN9370k5jS7e\/vh7+GBoCHBzLSqFdr+RJ5X19fPzvhmwWr1WqxWDBmd+\/eNQ24xibhG1MA4KsBukGjp6enUiqvqlX1bhnH4IjF6WX7UCAm7t69azab792L\/s0rAABsGtTDhN5gKOFLVZpm8xZQqZsNvfZ72\/TNiPDNqwDwCEDdLLS1d1wuFQiqao1GoylGjEajoKr2cqngZHpGFgAAXx1YK0J3d3eXXn9dUFVaWdXRqaf\/uoGNjk59CV9aJqzq0usxwQEASECQAYter5fUKC5e5VVK5Z1devovHch0dun5EvnFqzyJTKHX6\/GRAQBIQJCeA23t7eXC6vyi68VlQrFModa2tHd0Grq7Dd3d7R2dam2LWKYoui7IL7peLqxqbWvnEhMAgAQEdXGmvaNTVltfwpcUflGRX3T93Oel5z4vzS+6XvBFRQlfUlOnau\/o4B4NAIAEBHUCAACsgzoAAADWQfH+sAMAgAQCra2BQCDQnxX\/DEAgUOIo\/hmAQKDE0fo\/G74mjIMbojYwNrElhKiHdDYdHAQC4YXWmDZhDP4PuSKw9UNFAIEehtAay2Yjd9LbkZ\/k2wrKLQbZhhKfrZOeDGMOMQWnW3JMCQR6DIXWWDYhl4oQtYE5G9UFk0+swTeREgj0eGr9HxL\/fw4x\/8Q3KO4Ys5j2JL0ibDE4VAQQiC6mro1bZdsrAr36bGNF4B4c7wUCPZ5Ca+yb7WHfI+AtMTbbEhzvBQI9nkJr3DYbW5tjjdhEJzVReNcAAj18rf\/DctvM8Zab3sb7Mg7E2M8YIabgm04JBHoMFf8MQCBQ4ij+GYBAoMRR\/DMAgUCJo\/hnAAKBEkfxzwAEAiWO4p8BCARKHMU\/AxAIlDiKfwYgEChxFP8MQCBQ4ij+GYBAoMRR\/DMAgUCJo\/hnAAKBEkfxzwAEAiWO4p8BCARKHMU\/AxAIlDiKfwYgEChxFP8MQCBQ4ij+GYBAoMRR\/DMAgUCJo\/hnAAKBEkfxzwAEAiWO4p8BCARKHMU\/AxAIlDiKfwYgEChxFP8MQCBQ4ij+GYBAoMTR\/wHmRqcZerfCKwAAAABJRU5ErkJggg==\" \/><\/p>\n<p>All other pages in the NSF are stil using the default Theme:<\/p>\n<p><img decoding=\"async\" alt=\"\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUgAAABjCAIAAAB2ag4lAAATEElEQVR4nO2dWW8bWXbHLxAgmABBAwHmKWggH6DnEyTTeQkCDALE3Z0ESII8DmYyyEMadnu3tdkNL5IXqS3ZbW0kxV0kxU0iRUkUKXExqYVLcRdFkZRUEiVTbo8le9Re2nmoNlOs5VZRazd1fiCEW+eec+6pW\/fPKrGoErp563apVCqXy5sAUKeUy+VSqXTz1u2bt277fD6n0+lwOEZHR0dHRx0OR1220bXrX29tbR33zAPA4bK1tXXt+tfXrn\/t8XjsJwB07frX5XJ5AwDqmnK5TAl7amrKdgJA165\/\/fTp03V+IpHI+Pj4xMQEQRAYNwD4KfP06VMxwlYoFA8ePOjs7FSpVEcmwsMAtVy7vrm5ucbC6XRSF+tOpzObzabT6bGxMcoSCoXY\/gBwXLBlzPbZ3NxsuXa95dp1t9s9wqKrq6ujo6Ojo+Px48d+v9\/j8VQsAwMDbP+fPqi55drGxgZZjd1uDwaDa2try8vLL16\/u5750+3sn16+eZfP57PZrNPpnJ+fJwHguMELnu65sbHR3HKtueWay+Uarqa9vV2v12cyGYIg6Ks9FAo9efKku7tbJpMN\/9xATc0tpVJplUahULDb7a9ev\/3X4B9\/F3pxObGDTGVkKt\/KvPzf6HZDcmdpaclms60CwLGCkXelq+JcKpWamluamlsYwjabzR0dHZjVHgqF2tvbj0ufewY1Nbesr6+v0LDb7U6nM\/fHXTS08eemjcb4CzS0gYY2WtMv0NDGnxk3dnZf22w2p9O5Ug1CaOUgYOShb7K7KDAWfOaDDceUTYfTX8xwfKkOaubZ1dZa5IF4ioEhb7aq6W8BKysr6+vrlLAnJyetNDo6Onp6evCrvaOjo6ury1oNQsh6EDDy0DfZXRQYy\/93NTY1U5fcFHa7PRAIrK6u7u7uTq3vzG2+3N3dtSxvj6xs7+7ujqxsT63v7O7uFgoFr9c7MTGxTAMhtFxNxcLuwsBwpjYr+8DpVvHBJDnscIwzZu\/4wEwm54hicooEMxDGU2Tagyq1Iu8bN2588smvbt26Ran61q1bn3zyqxs3blB6plheXl5bW2tsam5sanY6nZYPtLe3GwyGTCaDX+0EQajV6s7OTgsNhJClmoqF3YWB4UxtVpYQp1vFB5MENTQ2kSRZ\/MDw8PDy8vJvXOtIU\/xL\/bIm913vwjOkKSJNUbLwnSb33V8NLSNN8d+9pXw+Pzw8XKSBECpWU7GwuzAwnOmbYtqYEcWH1BQu6Iw3clJTeTVNb61DY5Lv4bAeVKkVea+vr99vb\/\/1p5+2tbW1tbX9+tNP77e3UxehlXeBYrFIkmRDY1NDY5PT6TR\/4N69e6lUSsxqj0aj9+7dM9NACJmrqVjYXRgYzvRNMW1ey9WGJpIkCx8YGRkJBALS9NNf6paQYvFvhvItoRJSLCLFYkuo9Nf6JaRY\/KVuqS\/1NBgMjo2NFWgghKifVIPeZjQYPuwkYjb52nyWmkJqChd0xhvpveyp4wzk3GSHsBOK9OQbizOnYJLKoOyh6Z74tIwourZLpVJnV9epU5+dOvVZZ1dXqVSqqJp6FygUCiRJXm1outpQJez79+8bjUYxq91sNj948ICtJaqwioVhpBcvKOO9iZzXcqWhkS7sZDJptVoJgig9e\/4X8vRHykzzLImkKSRNUY2PlJnSs+cEQVit1kQiwThCjIPEecw4VwyfUXCT86hzZmaPzo7lzMYXjh+ObeRLy+hlTB1nLOc88IXjjwXGk9Mf4ykmLWZaOOvkm2e6sFdXVx8++vb3f\/if3\/7uvzu7uqiLcLawrzQ0XmlonJiYMH1Ao9HcvXvX5XLhV7vL5bp7965GozHRoOa80q785Gww2nxGwc0KGLcfjZevXKULu\/BB22trax+rEh\/J4o1PiqiXQL0E1fhYlVhbW2OrGn\/gMYuDL4MYB8zQNbnh15DIcMFS8cKuKT9moir7QqfAfywwnmx\/jCe+q8A1yYxYwX2ntysX5CsrK3fu3PuXf\/vPAYVKNqD4p3\/+7HZrKyXsynV7oVAgSfLylauXr1wdHx830lCr1Xfu3CkWi3yrvVgs3rlzR61WG6tBCDHaFQu7wWhzWgQdMENz+Fy6fIUh7EKhYLVaSZL8WEF8JIk0+JZQdwh1h6jGxwqCJEmr1cp5eDiPJWeD8xhj1iufBZNfTIWc1fLlEbPg+Iz4wthue54oPv3wHQvxycXk5Exbq7DxmSkqwr59u\/Uf\/vE3\/dKBUqlUKpUe9\/T+7d\/9\/c2bN9nCvnT5yqXLV8bGxoaqaWtrKxQKfKu9UCi0tbUNsUAIMdoVC7vBaHNaBB3Ydj6HoaEhdPHSZU5hJxKJ\/7AlP+qZuzqdRQ9n0MMZqvFf9mQsFjsMYYtRgnhlcvJTFjaf3mpNjtcVZiCMRXAUfBde2Pgdxwu7WCxS3yqr3LJdX1+nvklJ\/6StUCiQJHnx0uWLly47HA5DNa2trT6fj2+1e73e1tZWAwuEEKNdsbAbjLbgJj6cMRwn6MLFS2xhT0xMTE5OxuNxkiRVkfwvHgV+8SigiuRLpVIsFnM6nZOTkwUWnMeAfZwq8HlybvL5MFIx8uNzMsI5E9Y0Ot6ZvcmngQL\/tAgmZ88GX0KMJ3tm8Dk5oxhHgRElWI9gMYxPyOnQJU1BkuSFi5cuXLzEFnZHR0d\/f7\/X611eXmasdq\/X29fX9+DBA5GqYzToxfN5ihQ2PRtjs2KsKunc+QtsYRcKhYmJCepOdzgcpu7yh8NhysKpapGwDw8AYMAvGPwtMbonSZLnzl84d\/7C6OionkV7e3tra2tra+vExAR15p+YmKAs33zzDdtfJAihPcfuE3T23HlOYVPE43H611ni8fihHicAYCC4YMSoulAokCR59tz5s+fO2+32QR5kMtktGjKZjM9TJAihfWbY+9BfncUJGwDqA5Ikvzp7\/quz5202m\/YEgE6fOQvCBuoekiRPnzl7+sxZq9WqOgGAsIETQUXYJpNp4ASAvjx9BoQN1D0kSX55+syXp88YDAbJCQCd+vwLEDZQ95AkeerzL059\/kVTU9MfTgAoDwBA3YGWAACoO1AOAIC6owZhL2SzoQgx7Z8Zd3tHxt3DY+7hMffIuHvc7Z32B0MRYiGbPbxCAQAQD1oUQTyRdHsDFsfktH8mlkzllpaov5dbXlkpLi\/nlpZiydS0f8bimJzyBRPJlJicAAAcHiiLJZ3OePwzVocrFI0Vi0X88+WKxeJ8hLA6XB7\/TCaTwWcGAODwQAv8xBMJ27jbF5zL5wvinzK3lM97n8yOOqeSqTQmOQAAhwfK8BAlYsOOSSKexP8BDR9EPGl1TDY0NjUDAHDkoDQXRCxmsTsTydR+vhIQT6SmA\/Ov37x9DwDA0YJSLOKJhNXhnA9H93+XfD4cDcXS7979cNy7CQAnCw5hu6b9074gXrGV07Kgtv0z8yvrm8e9mwBwskDJaiLRqHFkfGEhi\/lSSz6fj0SIrsd9So1+cTGH\/wbMwsKCdyb8\/es3x72nAHCCQIlqJtyeJzPzmBvfS0tL4Uj0Ybfk296Bh90SldawtLSEv1c+G4oUV0t8Fbx69SqRSFT+o9Lk5GQikXj16tVRzgIA1BkoTiNKEHqLPZ3JYG58R6LEw25Jj0QhUw72y9X9A6pcLoe\/V55OZ\/xz0bfv3rGHX11dHR4e9vv9oVAomUyGQqFcLmc2m61W68rKytFPBwDUByhGw+sPOCan+O6MZbPZcCTyqFfaI1UOqPVytUGq1EWiRDabFbyrFpyPPnv+gjH2ysqK3W7f3Nzc3t6mnpRosVh8Pp\/RaLRarSaTCa9thBBjkwJjOcpwPmfGwyU5LRWam5upn3ToXQcIIz\/ec58ONYUf2SSw84sv8kA8DxBE0HA43d4nM5y3tRcWFsKRyMMeSbdEMaDWD6j1MpUuEiGy2SzfnXA68xGiSFZdjb98+dJsNm9tbb19+\/bNmzcvXrzweDyVh6fa7fZoNGoymV6+fMlRNJcIGW2+3qMJxzgzevEW+prgXO4HBWYgMSHiu\/aQ9ic4CTWNW3lj2nNhe6BK2GbbeCgc5VR1JBJ92C3plioGNHqFdkg5OBSORPnOz+wMsUQytVigDxyNRl0u1+vXr1+\/fr21tWUwGHTVEARhMBii0Shv6eKkxWmpKaSmcEHnmuo8ljW9\/5A6EDY++c9A2FEagyZbLBZnfFklk8mEQuGH3T+eq5WDRoV2SKIcfNgjvd\/5+G7Ho7sdD6lXW3uXRK7OZDLsb7zEE4lIMksf2Gazzc\/Pr6ysRKNRs9nMfsyiw+HI5\/M2m4239HoXNn6d0S9Q6UbGlWplU9CTXSG7l75G+Qbiq02wbHb7eCdBMKdgEr7pYnji03IeGkFQhIZmyJpMJhm3tdPp9OP+gW6JQq4xKHVG6iXXGqTKwX65hv7qlam7HkvS6TT73ngqlQrFM\/SBNRrNyMiIyWRSc2GxWHK5XLlc1mg0vKXzXPSy7YLhnLE1\/dqMH07Mew3+dM25yak3Toug53vWAhUMxy9ljFr4imHXdsSTICg8Pk8xadkh4udhD9pGYRpqgyUejzPubKdSqT6ZSqrUKQdN+JdCO9QtVaZSqSSLhYUFtrCVNLRarVKpNJlMZrNZqVTG4\/GdnZ319XW1Ws1beo2SE+km+Du2mHDBUms9XbMtfHKi6xOzpjEnBIyMBYXNVxu+i8\/\/iCcBI2yMJ77rPWu6GEOI2fe9CDtEQzM0HApH4tUkk8m5uZBMpVMMGlV6M\/VSDBplaoNUpaO\/+hVatc6UTCbjLNILC4xLcYvFIpfL5XK51+uNxWL5fH50dDQQCOj1erlcnkqlqH8qZLFYeEsXEjZG1e+PVdh7OF2zLXwLiNMHczZgc\/TC5st2xJOAEbZgTs60tQobn7km0DyNIavd6w\/EWCQSibn5kEytV2iNKp1ZpTOpdKZQOMK+3qZUzc6QyeYYH57Nzc3JZLLx8fFnz549f\/78+fPna2trDodDJpPJZDK5XE61Z2dneUsXrcx9hh+9sPkWAd8mfkmxG2JiMW2MsPHZxBSJkVNN2TAJ9z8JYvadcQ4XfHcQLK8m0ByN4dFx25iT4CIej8\/MzUlVesWgUakzSZWD3f2KmZnZWCzG6c8gsZBj3O7a2dmRy+USiYQgiGcfCIfDWq1WIpEoFIrBwUG5XL6zs8NbOvbGEqqG0x8TzpmwptHxzvh92duafk+7LGTb8Z6cFswoIsd9L0IJ72ka4PM8mklopsEeF7ODnHn49l2wHsFixFAl7En3tFJv5hNnPB6fmZ2TqfWKQZNi0NgtVXU+7g8EgoLazmQyc7E0+wsquVyur69Po9GUy+Wtra2tra3NzU2lUmmz2UZHR2UyWS6X28MuAUAdsDc9V0CzNILBGanaMDs3F+GBIIjgzKxMrVfpzMpBU49U9ahHShAEnz\/FxubTQDjB+cebi4uLEonEaDQGAgGfz2cwGIxGo8lkkkgki4uL+9kxAPhZs19hz1RjHnEMGofD\/ESj0UBwRqrWK3VmqUqv1Bqi0SjGP51OE+lcYXWdr4Lt7e1gMKjT6fr6+vr6+nQ6XTAY3N7e3s9eAcAJBwWr8fp8j2Vqnz8Q4icSifgDAalKpx2yUOrl84xGo+Wt76ZnIrvff3\/cewoAJwgUYGGxOWRqw9zc3Dw\/1Kk7EomEQiGMW7lcDoYTy2vwoAUAOFLQExZ+v39AY9AOWWf3TSydC8UzP\/wAj0YCgCMF+bnweL3dMo3VPjazD6y2Me8s8eYtPMwQAI4a5ONh0uV+0COXa4cCgUCwRgKBgFw79KBHfrWhsRkAgCOHV9g+n2\/a4+mVa3sGtO4pD\/tXcT7cU55umaZPoZ32eDDJAQA4PJAXi8fjUetN9x5JBjSGqWkP+xdyOlPTHpnacO+RRK0zeTwefGYAAA4P5BHBpMvVrxhs6+zt6lOodCabY9zlnvL6fF6fz+WesjnGVTpTZ6+8rbO3X6GdmHSJyQkAwOGBpkXjck\/phizdMnXHt9K2zt7b3\/Tc\/qanrbO3\/Vtpt0ytN1pdbrf4bAAAHB5oCgCAugO5AQCoO9BxfywPAMDBI\/A0AgAAfo6AsAGgDgFhA0Ad8uMzgzifv4sLE+1Z8ac3EBfvuZ4ZBADAHhB+GBhHTO3y2\/PDwAAA2APc50n8M\/0wm+xYegPvzHBj2DkD2ZXgowDghCAgbIxKBXsFQzg3xY\/C18ZEAcAJYV\/C3kOI+EvxPbx9iHEAgJOAsLDpMHoZDpy9fA3BzZpqEBkFACeEGs7Y+N6jOWPjPQWjAOCEIPCpuEiVHvYZW6RRjAMAnASqPqzmvGpl29mX4pxGTrVjUrGTiK9BZBQAnBBg0QNAHQLCBoA6BIQNAHUICBsA6hAQNgDUISBsAKhDQNgAUIeAsAGgDgFhA0AdAsIGgDoEhA0AdQgIGwDqEBA2ANQhIGwAqENA2ABQh4CwAaAOAWEDQB0CwgaAOgSEDQB1CAgbAOoQEDYA1CEgbACoQ0DYAFCHgLABoA4BYQNAHQLCBoA65P8AQT1LsknA2OAAAAAASUVORK5CYII=\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; or how you can use your own FacesContext implementation. What we need first is our own FacesContext implementation with new methods to set the StlyeKitId (which is the name of the Theme) for initializing the StyleKit instance: package ch.hasselba.xpages; &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=1414\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,26,81,74],"tags":[47,7,86,3],"class_list":["post-1414","post","type-post","status-publish","format-standard","hentry","category-java","category-jsf","category-web","category-xpages","tag-9-0","tag-domino","tag-jsf","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1414"}],"version-history":[{"count":4,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions"}],"predecessor-version":[{"id":1418,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions\/1418"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}