Author: sshafroi
Date: 2008-06-30 15:54:24 +0200 (Mon, 30 Jun 2008)
New Revision: 6711
Added:
trunk/war/src/main/webapp/WEB-INF/jsp/start.jsp
Removed:
trunk/war/src/main/webapp/WEB-INF/jsp/decorators/
Modified:
trunk/core-api/src/main/java/no/sesat/search/run/RunningQueryImpl.java
trunk/core-api/src/main/java/no/sesat/search/view/output/SyndicationGenerator.java
trunk/core-api/src/main/java/no/sesat/search/view/velocity/VelocityEngineFactory.java
trunk/core-api/src/test/java/no/sesat/search/view/velocity/VelocityTemplateTest.java
trunk/generic.sesam/war/src/main/conf/views.xml
trunk/run-handler-control-spi/src/main/java/no/sesat/search/run/handler/NavigationRunHandler.java
trunk/view-config-spi/src/main/java/no/sesat/search/view/config/SearchTab.java
trunk/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
trunk/war/src/main/java/no/sesat/search/view/taglib/AbstractVelocityTemplateTag.java
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabIncludeTag.java
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabMainTag.java
trunk/war/src/main/java/no/sesat/search/view/taglib/VelocityTemplateTag.java
Log:
SEARCH-4183 - Configurable content types
The content type can now be set using two different methods.
- Set it using the layouts content-type attribute like this example which is
taken form the mobile views.xml
<layout main="main" front="index" content-type="text/xml; charset=utf-8"/>
- Or you can set it in your jsp page if you use that. And that is what you
currently have to do if you net some kind of dynamically rules for setting it.
The "output" parameter has been changed to layout. When defining layouts in
views.xml you can give it an id and this id will map to the layout parameter.
So for rss output, you will specify layout=rss, and in the views.xml you will
have.<layout id="rss" main="rssDecorator.jsp"/>
Modified: trunk/core-api/src/main/java/no/sesat/search/run/RunningQueryImpl.java
===================================================================
--- trunk/core-api/src/main/java/no/sesat/search/run/RunningQueryImpl.java
2008-06-30 09:49:23 UTC (rev 6710)
+++ trunk/core-api/src/main/java/no/sesat/search/run/RunningQueryImpl.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -100,8 +100,6 @@
private static final String PARAM_COMMANDS = "commands";
// TODO generic parameter key to be put into ParameterDataObject
private static final String PARAM_WAITFOR = "waitFor";
- // TODO generic parameter key to be put into ParameterDataObject
- private static final String PARAM_OUTPUT = "output";
private static final Logger LOG = Logger.getLogger(RunningQueryImpl.class);
private static final Logger ANALYSIS_LOG =
Logger.getLogger("no.sesat.search.analyzer.Analysis");
@@ -623,7 +621,7 @@
private boolean isRss() {
- final StringDataObject outputParam =
datamodel.getParameters().getValue(PARAM_OUTPUT);
+ final StringDataObject outputParam =
datamodel.getParameters().getValue(PARAM_LAYOUT);
return null != outputParam && "rss".equals(outputParam.getString());
}
@@ -636,12 +634,12 @@
if( noHitsOutput.length() >0 &&
datamodel.getQuery().getString().length() >0
&& !"NOCOUNT".equals(parameters.get("IGNORE"))){
- final String output = null != parameters.get("output")
- ? parameters.get("output").getString()
+ final String layout = null != parameters.get(PARAM_LAYOUT)
+ ? parameters.get(PARAM_LAYOUT).getString()
: null;
noHitsOutput.insert(0, "<no-hits mode=\"" +
context.getSearchTab().getKey()
- + (null != output ? "\" output=\"" + output : "") + "\">"
+ + (null != layout ? "\" layout=\"" + layout : "") + "\">"
+ "<query>" + datamodel.getQuery().getXmlEscaped() +
"</query>");
noHitsOutput.append("</no-hits>");
PRODUCT_LOG.info(noHitsOutput.toString());
Modified:
trunk/core-api/src/main/java/no/sesat/search/view/output/SyndicationGenerator.java
===================================================================
---
trunk/core-api/src/main/java/no/sesat/search/view/output/SyndicationGenerator.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/core-api/src/main/java/no/sesat/search/view/output/SyndicationGenerator.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -1,4 +1,4 @@
-/* Copyright (2006-2007) Schibsted Søk AS
+/* Copyright (2006-2008) Schibsted Søk AS
* This file is part of SESAT.
*
* SESAT is free software: you can redistribute it and/or modify
@@ -315,7 +315,7 @@
final String templateUri = templateDir + name;
try {
- final VelocityContext cxt =
VelocityEngineFactory.newContextInstance(engine);
+ final VelocityContext cxt =
VelocityEngineFactory.newContextInstance();
cxt.put("text", text);
cxt.put("now", nowStringUTC);
@@ -327,7 +327,7 @@
cxt.put("datamodel", context.getDataModel());
- final String origUri = uri.replaceAll("&?output=[^&]+",
"").replaceAll("&?feedtype=[^&]+", "");
+ final String origUri = uri.replaceAll("&?layout=[^&]+",
"").replaceAll("&?feedtype=[^&]+", "");
cxt.put("uri", origUri);
final Template tpl = VelocityEngineFactory.getTemplate(engine,
site, templateUri);
Modified:
trunk/core-api/src/main/java/no/sesat/search/view/velocity/VelocityEngineFactory.java
===================================================================
---
trunk/core-api/src/main/java/no/sesat/search/view/velocity/VelocityEngineFactory.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/core-api/src/main/java/no/sesat/search/view/velocity/VelocityEngineFactory.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -1,4 +1,4 @@
-/* Copyright (2005-2007) Schibsted Søk AS
+/* Copyright (2005-2008) Schibsted Søk AS
* This file is part of SESAT.
*
* SESAT is free software: you can redistribute it and/or modify
@@ -143,7 +143,7 @@
}
}
- public static VelocityContext newContextInstance(final VelocityEngine
engine){
+ public static VelocityContext newContextInstance(){
final VelocityContext context = new VelocityContext();
@@ -295,8 +295,8 @@
engine.setProperty("url.resource.loader.cache", "false");
engine.setProperty("velocimacro.library.autoreload",
"true");
} else {
- engine.setProperty("url.resource.loader.cache", "true");
-
engine.setProperty("url.resource.loader.modificationCheckInterval", "60");
+ engine.setProperty("url.resource.loader.cache", "true");
+
engine.setProperty("url.resource.loader.modificationCheckInterval", "60");
engine.setProperty(Velocity.RESOURCE_MANAGER_CLASS,
QuickResourceManagerImpl.class.getName());
engine.setProperty(Velocity.RESOURCE_MANAGER_CACHE_CLASS,
QuickResourceCacheImpl.class.getName());
engine.setProperty(Velocity.RESOURCE_MANAGER_DEFAULTCACHE_SIZE, "0");
Modified:
trunk/core-api/src/test/java/no/sesat/search/view/velocity/VelocityTemplateTest.java
===================================================================
---
trunk/core-api/src/test/java/no/sesat/search/view/velocity/VelocityTemplateTest.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/core-api/src/test/java/no/sesat/search/view/velocity/VelocityTemplateTest.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -119,7 +119,7 @@
})
.getEngine();
final Template template =
VelocityEngineFactory.getTemplate(engine, site, templateName);
- final VelocityContext context =
VelocityEngineFactory.newContextInstance(engine);
+ final VelocityContext context =
VelocityEngineFactory.newContextInstance();
context.put("datamodel", datamodel);
template.merge(context, new StringWriter());
Modified: trunk/generic.sesam/war/src/main/conf/views.xml
===================================================================
--- trunk/generic.sesam/war/src/main/conf/views.xml 2008-06-30 09:49:23 UTC
(rev 6710)
+++ trunk/generic.sesam/war/src/main/conf/views.xml 2008-06-30 13:54:24 UTC
(rev 6711)
@@ -41,5 +41,6 @@
<include key="bottom-seven"/>
<include key="bottom-eight"/>
</layout>
+ <layout id="opensearch" main="opensearchDecorator.jsp"/>
</tab>
</views>
Modified:
trunk/run-handler-control-spi/src/main/java/no/sesat/search/run/handler/NavigationRunHandler.java
===================================================================
---
trunk/run-handler-control-spi/src/main/java/no/sesat/search/run/handler/NavigationRunHandler.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/run-handler-control-spi/src/main/java/no/sesat/search/run/handler/NavigationRunHandler.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -62,13 +62,13 @@
private NavigationControllerSpiFactory controllerFactoryFactory;
private NavigationManager navigationManager;
- private static final String PARAM_OUTPUT = "output";
+ private static final String PARAM_LAYOUT = "layout";
public NavigationRunHandler(final RunHandlerConfig rhc) {}
private boolean isRss(final DataModel datamodel) {
final Map<String,StringDataObject> parameters =
datamodel.getParameters().getValues();
- return parameters.get(PARAM_OUTPUT) != null &&
parameters.get(PARAM_OUTPUT).getString().equals("rss");
+ return parameters.get(PARAM_LAYOUT) != null &&
parameters.get(PARAM_LAYOUT).getString().equals("rss");
}
public void handleRunningQuery(final Context context) {
Modified:
trunk/view-config-spi/src/main/java/no/sesat/search/view/config/SearchTab.java
===================================================================
---
trunk/view-config-spi/src/main/java/no/sesat/search/view/config/SearchTab.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/view-config-spi/src/main/java/no/sesat/search/view/config/SearchTab.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -532,6 +532,7 @@
private String front;
private Map<String,String> includes;
private Map<String,String> properties;
+ private String contentType;
private Layout(){}
@@ -547,6 +548,7 @@
front = inherit.front;
includes = inherit.includes;
properties = inherit.properties;
+ contentType = inherit.contentType;
}
}
@@ -617,6 +619,15 @@
return front;
}
+ /**
+ * Get the content type that is specified in views.xml.
+ *
+ * @return content type
+ */
+ public String getContentType(){
+ return contentType;
+ }
+
/** Will return null when the element argument is null.
* Otherwise returns the Layout object deserialised from the contents
of the Element.
** @param element
@@ -637,6 +648,9 @@
if(0 < element.getAttribute("front").length()){
front = element.getAttribute("front");
}
+ if(0 < element.getAttribute("content-type").length()){
+ contentType = element.getAttribute("content-type");
+ }
includes = readMap(includes,
element.getElementsByTagName("include"), "key", "template");
properties = readMap(properties,
element.getElementsByTagName("property"), "key", "value");
}
Modified:
trunk/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
===================================================================
--- trunk/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
2008-06-30 09:49:23 UTC (rev 6710)
+++ trunk/war/src/main/java/no/sesat/search/http/servlet/SearchServlet.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -28,12 +28,9 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
+
import no.schibstedsok.commons.ioc.BaseContext;
import no.schibstedsok.commons.ioc.ContextWrapper;
-import no.sesat.search.mode.SearchMode;
-import no.sesat.search.mode.SearchModeFactory;
-import no.sesat.search.run.QueryFactory;
-import no.sesat.search.run.RunningQuery;
import no.sesat.search.datamodel.DataModel;
import no.sesat.search.datamodel.DataModelFactory;
import no.sesat.search.datamodel.access.ControlLevel;
@@ -42,18 +39,28 @@
import no.sesat.search.datamodel.page.PageDataObject;
import no.sesat.search.datamodel.request.ParametersDataObject;
import no.sesat.search.http.servlet.FactoryReloads.ReloadArg;
+import no.sesat.search.mode.SearchMode;
+import no.sesat.search.mode.SearchModeFactory;
+import no.sesat.search.run.QueryFactory;
+import no.sesat.search.run.RunningQuery;
import no.sesat.search.site.Site;
import no.sesat.search.site.SiteContext;
import no.sesat.search.site.SiteKeyedFactoryInstantiationException;
-import no.sesat.search.site.config.*;
+import no.sesat.search.site.config.BytecodeLoader;
+import no.sesat.search.site.config.DocumentLoader;
+import no.sesat.search.site.config.PropertiesLoader;
+import no.sesat.search.site.config.SiteConfiguration;
+import no.sesat.search.site.config.TextMessages;
+import no.sesat.search.site.config.UrlResourceLoader;
+import no.sesat.search.view.SearchTabFactory;
import no.sesat.search.view.config.SearchTab;
-import no.sesat.search.view.SearchTabFactory;
-import no.sesat.search.site.config.TextMessages;
+
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.time.StopWatch;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
+
/** The Central Controller to incoming queries.
* Controls the SearchMode -> RunningQuery creation and handling.
*
@@ -61,7 +68,7 @@
*
* @version <tt>$Id$</tt>
*/
-public final class SearchServlet extends HttpServlet {
+public final class SearchServlet extends HttpServlet {
// Constants -----------------------------------------------------
@@ -191,9 +198,9 @@
// If the rss is hidden, require a partnerId.
// The security by obscurity has been somewhat improved by the
// addition of rssPartnerId as a md5-protected parameter
(MD5ProtectedParametersFilter).
- final StringDataObject output =
parametersDO.getValue("output");
- boolean hiddenRssWithoutPartnerId = null != output
- && "rss".equals(output.getString())
+ final StringDataObject layout =
parametersDO.getValue("layout");
+ boolean hiddenRssWithoutPartnerId = null != layout
+ && "rss".equals(layout.getString())
&& searchTab.isRssHidden()
&& null == parametersDO.getValues().get("rssPartnerId");
@@ -201,7 +208,7 @@
response.sendError(HttpServletResponse.SC_NOT_FOUND);
- } else if (null != output && "rss".equals(output.getString())
&& "".equals(searchTab.getRssResultName())) {
+ } else if (null != layout && "rss".equals(layout.getString())
&& "".equals(searchTab.getRssResultName())) {
LOG.warn("RSS not supported for requested vertical " +
searchTab.toString());
response.sendError(HttpServletResponse.SC_NOT_FOUND);
@@ -214,15 +221,7 @@
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
- String output = request.getParameter("output");
- if (output == null || output.isEmpty()) {
- if (site.getName().startsWith("xml")) {
- output = "mobile";
- } else {
- output = "web";
- }
- }
- RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/WEB-INF/jsp/decorators/" + output +
"Decorator.jsp");
+ RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/WEB-INF/jsp/start.jsp");
dispatcher.forward(request, response);
}finally{
@@ -235,6 +234,7 @@
// Private -------------------------------------------------------
+
private static void performFactoryReloads(
final String reload,
final SiteContext genericCxt,
@@ -363,7 +363,7 @@
}
final DataModel datamodel = (DataModel)
request.getSession().getAttribute(DataModel.KEY);
- final StringDataObject output =
datamodel.getParameters().getValue("output");
+ final StringDataObject layout =
datamodel.getParameters().getValue("layout");
final RunningQuery.Context rqCxt = ContextWrapper.wrap(
RunningQuery.Context.class,
@@ -383,7 +383,7 @@
updateAttributes(request, rqCxt);
- if(null == output ||
!"opensearch".equalsIgnoreCase(output.getString())){
+ if(null == layout ||
!"opensearch".equalsIgnoreCase(layout.getString())){
try {
@@ -405,7 +405,7 @@
STATISTICS_LOG.info(
"<search-servlet"
- + (null != output ? " output=\"" +
output.getXmlEscaped() + "\">" : ">")
+ + (null != layout ? " layout=\"" +
layout.getXmlEscaped() + "\">" : ">")
+ "<query>" +
datamodel.getQuery().getXmlEscaped() + "</query>"
+ "<time>" + stopWatch + "</time>"
+
((StringBuffer)request.getAttribute("no.sesat.Statistics")).toString()
Modified:
trunk/war/src/main/java/no/sesat/search/view/taglib/AbstractVelocityTemplateTag.java
===================================================================
---
trunk/war/src/main/java/no/sesat/search/view/taglib/AbstractVelocityTemplateTag.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/war/src/main/java/no/sesat/search/view/taglib/AbstractVelocityTemplateTag.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -24,6 +24,7 @@
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletException;
+import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
@@ -76,27 +77,45 @@
// Protected -----------------------------------------------------
- /** Find (and initialise into the PageContext) the layout this request is
to use.
+ /**
+ * Find the layout that belongs to this model.
*
* @param datamodel
- * @return
+ * @return Layout
*/
- protected final Layout findLayout(final DataModel datamodel){
+ public static Layout findLayout(final DataModel datamodel){
Layout layout = null;
- final PageContext cxt = (PageContext) getJspContext();
- if(null != cxt && null != datamodel && null != datamodel.getPage()){
+ if(null != datamodel && null != datamodel.getPage()){
final SearchTab tab = datamodel.getPage().getCurrentTab();
final ParametersDataObject params = datamodel.getParameters();
final StringDataObject layoutDO = null != params ?
params.getValue(RunningQueryImpl.PARAM_LAYOUT) : null;
- layout = null != cxt.getAttribute("layout") ?
(Layout)cxt.getAttribute("layout") : null != layoutDO && null != tab && null !=
tab.getLayouts()
+ layout = null != layoutDO && null != tab && null !=
tab.getLayouts()
? tab.getLayouts().get(layoutDO.getXmlEscaped())
: null != tab ? tab.getDefaultLayout() : null;
- cxt.setAttribute("layout", layout);
}
return layout;
}
+ /**
+ * Find the layout from the context. If not found in context we look for it
+ * in the datamodel and set it in the context.
+ *
+ * @param cxt
+ * @return Layout
+ */
+ protected Layout findLayout(final JspContext cxt) {
+ Layout layout = null;
+ if (cxt != null) {
+ layout = (Layout)cxt.getAttribute("layout");
+ if (layout == null) {
+ layout = findLayout((DataModel)
cxt.findAttribute(DataModel.KEY));
+ cxt.setAttribute("layout", layout);
+ }
+ }
+ return layout;
+ }
+
protected final Site getSiteManually(final PageContext cxt) {
Site site = null;
try {
@@ -126,6 +145,23 @@
}
}
+ /** Forward to the specified jsp.
+ *
+ * @param include must contain ".jsp" suffix.
+ * @throws java.io.IOException
+ * @throws javax.servlet.ServletException
+ */
+ protected final void forwardJsp(final String include) throws JspException{
+
+ try{
+ ((PageContext)getJspContext()).forward(include);
+ }catch(IOException ioe){
+ throw new JspException(ioe);
+ }catch(ServletException ioe){
+ throw new JspException(ioe);
+ }
+ }
+
/** Imports the specified velocity template.
*
* @param templateName may or may not contain ".vm" extension.
@@ -170,7 +206,7 @@
site,
templateName.replaceAll(".vm$", ""));
- final VelocityContext context =
VelocityEngineFactory.newContextInstance(engine);
+ final VelocityContext context =
VelocityEngineFactory.newContextInstance();
// populate context with request and response // TODO remove,
since all attributes are copied in
context.put("request", cxt.getRequest());
@@ -196,7 +232,7 @@
; e.hasMoreElements();) {
final String attrName = e.nextElement();
- /* do not overwrite parameters already in the velocity context
*/
+ // do not overwrite parameters already in the velocity context
if (!context.containsKey(attrName)) {
context.put(attrName,
cxt.getRequest().getAttribute(attrName));
}
Modified:
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabIncludeTag.java
===================================================================
---
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabIncludeTag.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabIncludeTag.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -87,7 +87,7 @@
public void doTag() throws JspException, IOException {
final PageContext cxt = (PageContext) getJspContext();
- final Layout layout = findLayout((DataModel)
cxt.findAttribute(DataModel.KEY));
+ final Layout layout = findLayout(cxt);
if(null != layout.getInclude(include) &&
layout.getInclude(include).length() > 0 ){
Modified:
trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabMainTag.java
===================================================================
--- trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabMainTag.java
2008-06-30 09:49:23 UTC (rev 6710)
+++ trunk/war/src/main/java/no/sesat/search/view/taglib/SearchTabMainTag.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -25,14 +25,10 @@
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.ServletException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import no.sesat.search.datamodel.DataModel;
-import no.sesat.search.datamodel.generic.StringDataObject;
-import no.sesat.search.run.RunningQueryImpl;
-import no.sesat.search.view.config.SearchTab;
import no.sesat.search.view.config.SearchTab.Layout;
import org.apache.log4j.Logger;
@@ -90,9 +86,10 @@
? layout.getFront()
: null;
- String include = datamodel.getQuery().getQuery().isBlank() && null !=
front
+ String include = datamodel.getQuery() != null &&
datamodel.getQuery().getQuery().isBlank() && null != front
? front
: layout.getMain();
+
include = include.startsWith("/")
? include
: PAGES_DIRECTORY + include;
@@ -100,14 +97,16 @@
try{
if(null != include){
- include = include.startsWith("/") ? include : PAGES_DIRECTORY +
include;
-
final Map<String,Object> map = new HashMap<String,Object>();
map.put("layout", layout);
+ if(layout.getContentType() != null) {
+ cxt.getResponse().setContentType(layout.getContentType());
+ }
+
if(include.endsWith(".jsp")){
- importJsp(include);
+ forwardJsp(include);
}else if(include.endsWith(".vm")){
Modified:
trunk/war/src/main/java/no/sesat/search/view/taglib/VelocityTemplateTag.java
===================================================================
---
trunk/war/src/main/java/no/sesat/search/view/taglib/VelocityTemplateTag.java
2008-06-30 09:49:23 UTC (rev 6710)
+++
trunk/war/src/main/java/no/sesat/search/view/taglib/VelocityTemplateTag.java
2008-06-30 13:54:24 UTC (rev 6711)
@@ -70,13 +70,11 @@
*/
@Override
public void doTag() throws JspException {
-
- final Layout layout =
findLayout((DataModel)((PageContext)getJspContext()).findAttribute(DataModel.KEY));
+ final Layout layout = findLayout((PageContext)getJspContext());
final Map<String,Object> map = new HashMap<String,Object>();
map.put("layout", layout);
map.put("commandName", command != null ? command : this.template);
importVelocity(this.template, map);
-
}
/**
Added: trunk/war/src/main/webapp/WEB-INF/jsp/start.jsp
===================================================================
--- trunk/war/src/main/webapp/WEB-INF/jsp/start.jsp
(rev 0)
+++ trunk/war/src/main/webapp/WEB-INF/jsp/start.jsp 2008-06-30 13:54:24 UTC
(rev 6711)
@@ -0,0 +1 @@
+<%@ taglib uri="/WEB-INF/SearchPortal.tld" prefix="search" %><search:main/>
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits