add EsApiManager, modify error pages and minor fixes
This commit is contained in:
parent
87a28313e3
commit
0eacf8bf21
34 changed files with 405 additions and 903 deletions
2
pom.xml
2
pom.xml
|
@ -63,7 +63,7 @@
|
|||
|
||||
<!-- Elasticsearch -->
|
||||
<elasticsearch.version>1.7.2</elasticsearch.version>
|
||||
<cluster.runner.version>1.7.0.0</cluster.runner.version>
|
||||
<cluster.runner.version>1.7.0.1-SNAPSHOT</cluster.runner.version>
|
||||
|
||||
<!-- Tomcat -->
|
||||
<tomcat.boot.version>0.3.7</tomcat.boot.version>
|
||||
|
|
|
@ -1,17 +1,37 @@
|
|||
package org.codelibs.fess.api.es;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.codelibs.core.exception.IORuntimeException;
|
||||
import org.codelibs.core.io.CopyUtil;
|
||||
import org.codelibs.core.io.InputStreamUtil;
|
||||
import org.codelibs.core.misc.DynamicProperties;
|
||||
import org.codelibs.elasticsearch.runner.net.Curl.Method;
|
||||
import org.codelibs.elasticsearch.runner.net.CurlRequest;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.api.BaseApiManager;
|
||||
import org.codelibs.fess.app.web.base.login.FessLoginAssist;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class EsApiManager extends BaseApiManager {
|
||||
private static final Logger logger = LoggerFactory.getLogger(EsApiManager.class);
|
||||
|
||||
@Resource
|
||||
protected DynamicProperties crawlerProperties;
|
||||
|
||||
protected String[] acceptedRoles = new String[] { "admin" };
|
||||
|
||||
public EsApiManager() {
|
||||
|
@ -30,12 +50,47 @@ public class EsApiManager extends BaseApiManager {
|
|||
|
||||
@Override
|
||||
public void process(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
String path = request.getServletPath().substring(pathPrefix.length());
|
||||
if (!path.startsWith("/")) {
|
||||
path = "/" + path;
|
||||
}
|
||||
Method httpMethod = Method.valueOf(request.getMethod().toUpperCase(Locale.ROOT));
|
||||
CurlRequest curlRequest = new CurlRequest(httpMethod, getUrl() + path);
|
||||
request.getParameterMap().entrySet().stream().forEach(entry -> {
|
||||
if (entry.getValue().length > 1) {
|
||||
curlRequest.param(entry.getKey(), String.join(",", entry.getValue()));
|
||||
} else if (entry.getValue().length == 1) {
|
||||
curlRequest.param(entry.getKey(), entry.getValue()[0]);
|
||||
}
|
||||
});
|
||||
curlRequest.onConnect((req, con) -> {
|
||||
con.setDoOutput(true);
|
||||
if (httpMethod != Method.GET) {
|
||||
try (ServletInputStream in = request.getInputStream(); OutputStream out = con.getOutputStream()) {
|
||||
CopyUtil.copy(in, out);
|
||||
} catch (IOException e) {
|
||||
throw new IORuntimeException(e);
|
||||
}
|
||||
}
|
||||
}).execute(con -> {
|
||||
try (InputStream in = con.getInputStream(); ServletOutputStream out = response.getOutputStream()) {
|
||||
response.setStatus(con.getResponseCode());
|
||||
CopyUtil.copy(in, out);
|
||||
} catch (IOException e) {
|
||||
try (InputStream err = con.getErrorStream()) {
|
||||
logger.error(new String(InputStreamUtil.getBytes(err), Constants.CHARSET_UTF_8));
|
||||
} catch (IOException e1) {}
|
||||
throw new IORuntimeException(e);
|
||||
}
|
||||
});
|
||||
// TODO exception
|
||||
}
|
||||
|
||||
public void setAcceptedRoles(String[] acceptedRoles) {
|
||||
this.acceptedRoles = acceptedRoles;
|
||||
}
|
||||
|
||||
protected String getUrl() {
|
||||
return crawlerProperties.getProperty(Constants.ELASTICSEARCH_WEB_URL_PROPERTY, Constants.ELASTICSEARCH_WEB_URL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.codelibs.fess.app.web;
|
||||
|
||||
import org.codelibs.fess.app.web.base.FessSearchAction;
|
||||
import org.codelibs.fess.app.web.search.SearchForm;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.response.HtmlResponse;
|
||||
|
||||
|
@ -34,11 +35,14 @@ public class RootAction extends FessSearchAction {
|
|||
// Search Execute
|
||||
// ==============
|
||||
@Execute
|
||||
public HtmlResponse index(final RootForm form) {
|
||||
public HtmlResponse index() {
|
||||
searchAvailable();
|
||||
|
||||
return asHtml(path_IndexJsp).renderWith(data -> {
|
||||
buildLabelParams(form.fields);
|
||||
return asHtml(path_IndexJsp).useForm(SearchForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
buildLabelParams(form.fields);
|
||||
});
|
||||
}).renderWith(data -> {
|
||||
buildInitParams();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
/*
|
||||
* Copyright 2009-2015 the CodeLibs Project and the Others.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the specific language
|
||||
* governing permissions and limitations under the License.
|
||||
*/
|
||||
|
||||
package org.codelibs.fess.app.web;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class RootForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Map<String, String[]> fields = new HashMap<>();
|
||||
|
||||
//@Maxbytelength(maxbytelength = 1000)
|
||||
public String query;
|
||||
|
||||
public String sort;
|
||||
|
||||
public String num;
|
||||
|
||||
public String[] lang;
|
||||
}
|
|
@ -16,27 +16,16 @@
|
|||
|
||||
package org.codelibs.fess.app.web.admin.system;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.misc.DynamicProperties;
|
||||
import org.codelibs.fess.annotation.Token;
|
||||
import org.codelibs.fess.app.service.ScheduledJobService;
|
||||
import org.codelibs.fess.app.web.base.FessAdminAction;
|
||||
import org.codelibs.fess.es.client.FessEsClient;
|
||||
import org.codelibs.fess.es.exentity.ScheduledJob;
|
||||
import org.codelibs.fess.helper.JobHelper;
|
||||
import org.codelibs.fess.helper.SystemHelper;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.callback.ActionRuntime;
|
||||
import org.lastaflute.web.response.HtmlResponse;
|
||||
import org.lastaflute.web.util.LaRequestUtil;
|
||||
|
||||
/**
|
||||
* @author shinsuke
|
||||
* @author Keiichi Watanabe
|
||||
*/
|
||||
public class AdminSystemAction extends FessAdminAction {
|
||||
|
@ -44,18 +33,9 @@ public class AdminSystemAction extends FessAdminAction {
|
|||
// ===================================================================================
|
||||
// Attribute
|
||||
// =========
|
||||
private static final String STARTING_CRAWL_PROCESS = "startingCrawlProcess";
|
||||
|
||||
@Resource
|
||||
private SystemHelper systemHelper;
|
||||
@Resource
|
||||
protected DynamicProperties crawlerProperties;
|
||||
@Resource
|
||||
protected JobHelper jobHelper;
|
||||
@Resource
|
||||
protected ScheduledJobService scheduledJobService;
|
||||
@Resource
|
||||
protected FessEsClient fessEsClient;
|
||||
|
||||
// ===================================================================================
|
||||
// Hook
|
||||
|
@ -71,64 +51,7 @@ public class AdminSystemAction extends FessAdminAction {
|
|||
// ==============
|
||||
@Execute
|
||||
public HtmlResponse index() {
|
||||
return asHtml(path_AdminSystem_IndexJsp).useForm(SystemForm.class).renderWith(data -> {
|
||||
data.register("clusterName", fessEsClient.getClusterName());
|
||||
data.register("clusterStatus", fessEsClient.getStatus());
|
||||
data.register("crawlerRunning", isCrawlerRunning());
|
||||
data.register("runningSessionIds", getRunningSessionIds());
|
||||
});
|
||||
}
|
||||
|
||||
@Token(save = false, validate = true)
|
||||
@Execute
|
||||
public HtmlResponse start(final SystemForm form) {
|
||||
if (!jobHelper.isCrawlProcessRunning()) {
|
||||
final List<ScheduledJob> scheduledJobList = scheduledJobService.getCrawlerJobList();
|
||||
for (final ScheduledJob scheduledJob : scheduledJobList) {
|
||||
scheduledJob.start();
|
||||
}
|
||||
saveInfo(messages -> messages.addSuccessStartCrawlProcess(GLOBAL));
|
||||
LaRequestUtil.getRequest().getSession().setAttribute(STARTING_CRAWL_PROCESS, Boolean.TRUE);
|
||||
} else {
|
||||
saveInfo(messages -> messages.addErrorsFailedToStartCrawlProcess(GLOBAL));
|
||||
}
|
||||
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
@Token(save = false, validate = true)
|
||||
@Execute
|
||||
public HtmlResponse stop(final SystemForm form) {
|
||||
if (jobHelper.isCrawlProcessRunning()) {
|
||||
if (StringUtil.isNotBlank(form.sessionId)) {
|
||||
jobHelper.destroyCrawlerProcess(form.sessionId);
|
||||
} else {
|
||||
for (final String sessionId : jobHelper.getRunningSessionIdSet()) {
|
||||
jobHelper.destroyCrawlerProcess(sessionId);
|
||||
}
|
||||
}
|
||||
saveInfo(messages -> messages.addSuccessStoppingCrawlProcess(GLOBAL));
|
||||
} else {
|
||||
saveInfo(messages -> messages.addErrorsNoRunningCrawlProcess(GLOBAL));
|
||||
}
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
public boolean isCrawlerRunning() {
|
||||
final HttpSession session = LaRequestUtil.getRequest().getSession(false);
|
||||
if (session != null) {
|
||||
final Object obj = session.getAttribute(STARTING_CRAWL_PROCESS);
|
||||
if (obj != null) {
|
||||
session.removeAttribute(STARTING_CRAWL_PROCESS);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return jobHelper.isCrawlProcessRunning();
|
||||
}
|
||||
|
||||
public String[] getRunningSessionIds() {
|
||||
final Set<String> idSet = jobHelper.getRunningSessionIdSet();
|
||||
return idSet.toArray(new String[idSet.size()]);
|
||||
return asHtml(path_AdminSystem_IndexJsp);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/*
|
||||
* Copyright 2009-2015 the CodeLibs Project and the Others.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the specific language
|
||||
* governing permissions and limitations under the License.
|
||||
*/
|
||||
|
||||
package org.codelibs.fess.app.web.admin.system;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author codelibs
|
||||
* @author Keiichi Watanabe
|
||||
*/
|
||||
public class SystemForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//@Required(target = "delete")
|
||||
public String sessionId;
|
||||
|
||||
}
|
|
@ -1,13 +1,14 @@
|
|||
package org.codelibs.fess.app.web.cache;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
import java.io.Serializable;
|
||||
|
||||
public class CacheForm extends RootForm {
|
||||
public class CacheForm implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//@Required(target = "go,cache")
|
||||
//@Maxbytelength(maxbytelength = 100)
|
||||
public String docId;
|
||||
|
||||
public String[] hq;
|
||||
|
||||
}
|
||||
|
|
|
@ -16,9 +16,10 @@
|
|||
|
||||
package org.codelibs.fess.app.web.error;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.codelibs.fess.app.web.search.SearchForm;
|
||||
|
||||
public class ErrorForm implements Serializable {
|
||||
// TODO workaround
|
||||
public class ErrorForm extends SearchForm {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package org.codelibs.fess.app.web.go;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
|
||||
public class GoForm extends RootForm {
|
||||
public class GoForm {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//@Required(target = "go,cache")
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.codelibs.fess.app.web.help;
|
||||
|
||||
import org.codelibs.fess.app.web.base.FessSearchAction;
|
||||
import org.codelibs.fess.app.web.search.SearchForm;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.response.HtmlResponse;
|
||||
|
||||
|
@ -39,9 +40,12 @@ public class HelpAction extends FessSearchAction {
|
|||
// ==============
|
||||
|
||||
@Execute
|
||||
public HtmlResponse index(final HelpForm form) {
|
||||
return asHtml(path_HelpJsp).renderWith(data -> {
|
||||
buildLabelParams(form.fields);
|
||||
public HtmlResponse index() {
|
||||
return asHtml(path_HelpJsp).useForm(SearchForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
buildLabelParams(form.fields);
|
||||
});
|
||||
}).renderWith(data -> {
|
||||
buildInitParams();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
package org.codelibs.fess.app.web.help;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
|
||||
public class HelpForm extends RootForm {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
package org.codelibs.fess.app.web.login;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.hibernate.validator.constraints.NotBlank;
|
||||
|
||||
public class LoginForm extends RootForm {
|
||||
public class LoginForm implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@NotBlank
|
||||
|
|
|
@ -40,7 +40,7 @@ public class OsddAction extends FessSearchAction {
|
|||
// ==============
|
||||
|
||||
@Execute
|
||||
public HtmlResponse index(final OsddForm form) {
|
||||
public HtmlResponse index() {
|
||||
searchAvailable();
|
||||
openSearchHelper.write(LaResponseUtil.getResponse());
|
||||
return null;
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
package org.codelibs.fess.app.web.osdd;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
|
||||
public class OsddForm extends RootForm {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package org.codelibs.fess.app.web.screenshot;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
import java.io.Serializable;
|
||||
|
||||
public class ScreenshotForm extends RootForm {
|
||||
public class ScreenshotForm implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public String docId;
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.app.web.RootAction;
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
import org.codelibs.fess.app.web.base.FessSearchAction;
|
||||
import org.codelibs.fess.es.client.FessEsClient.SearchConditionBuilder;
|
||||
import org.codelibs.fess.es.exentity.SearchLog;
|
||||
|
@ -449,7 +448,7 @@ public class SearchAction extends FessSearchAction {
|
|||
}
|
||||
}
|
||||
|
||||
protected String getDisplayQuery(final RootForm form, final List<Map<String, String>> labelTypeItems) {
|
||||
protected String getDisplayQuery(final SearchForm form, final List<Map<String, String>> labelTypeItems) {
|
||||
final StringBuilder buf = new StringBuilder(100);
|
||||
buf.append(form.query);
|
||||
if (!form.fields.isEmpty() && form.fields.containsKey(LABEL_FIELD)) {
|
||||
|
@ -473,7 +472,7 @@ public class SearchAction extends FessSearchAction {
|
|||
return buf.toString();
|
||||
}
|
||||
|
||||
protected void normalizePageNum(final RootForm form) {
|
||||
protected void normalizePageNum(final SearchForm form) {
|
||||
try {
|
||||
final int num = Integer.parseInt(form.num);
|
||||
if (num > getMaxPageSize()) {
|
||||
|
|
|
@ -16,17 +16,28 @@
|
|||
|
||||
package org.codelibs.fess.app.web.search;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.codelibs.fess.app.web.RootForm;
|
||||
import org.codelibs.fess.entity.FacetInfo;
|
||||
import org.codelibs.fess.entity.GeoInfo;
|
||||
|
||||
public class SearchForm extends RootForm {
|
||||
public class SearchForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Map<String, String[]> fields = new HashMap<>();
|
||||
|
||||
//@Maxbytelength(maxbytelength = 1000)
|
||||
public String query;
|
||||
|
||||
public String sort;
|
||||
|
||||
public String num;
|
||||
|
||||
public String[] lang;
|
||||
|
||||
public String additional[];
|
||||
|
||||
//@Maxbytelength(maxbytelength = 10)
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package org.codelibs.fess.es.exentity;
|
||||
|
||||
import java.util.Base64;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.es.bsentity.BsUser;
|
||||
|
||||
/**
|
||||
|
@ -8,4 +12,14 @@ import org.codelibs.fess.es.bsentity.BsUser;
|
|||
public class User extends BsUser {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public String[] getRoleNames() {
|
||||
return Stream.of(getRoles()).map(role -> new String(Base64.getDecoder().decode(role), Constants.CHARSET_UTF_8))
|
||||
.toArray(n -> new String[n]);
|
||||
}
|
||||
|
||||
public String[] getGroupNames() {
|
||||
return Stream.of(getGroups()).map(group -> new String(Base64.getDecoder().decode(group), Constants.CHARSET_UTF_8))
|
||||
.toArray(n -> new String[n]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,10 +63,18 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
|
|||
}
|
||||
|
||||
public boolean hasRole(String role) {
|
||||
return Stream.of(user.getRoles()).anyMatch(s -> s.equals(role));
|
||||
return Stream.of(user.getRoleNames()).anyMatch(s -> s.equals(role));
|
||||
}
|
||||
|
||||
public boolean hasRoles(String[] acceptedRoles) {
|
||||
return Stream.of(user.getRoles()).anyMatch(s1 -> Stream.of(acceptedRoles).anyMatch(s2 -> s2.equals(s1)));
|
||||
return Stream.of(user.getRoleNames()).anyMatch(s1 -> Stream.of(acceptedRoles).anyMatch(s2 -> s2.equals(s1)));
|
||||
}
|
||||
|
||||
public boolean hasGroup(String group) {
|
||||
return Stream.of(user.getGroupNames()).anyMatch(s -> s.equals(group));
|
||||
}
|
||||
|
||||
public boolean hasGroups(String[] acceptedGroups) {
|
||||
return Stream.of(user.getGroupNames()).anyMatch(s1 -> Stream.of(acceptedGroups).anyMatch(s2 -> s2.equals(s1)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,11 @@
|
|||
<include path="lastaflute.xml"/>
|
||||
|
||||
<include path="fess.xml"/>
|
||||
<include path="fess_job.xml"/>
|
||||
<include path="fess_ad.xml"/>
|
||||
<include path="fess_api.xml"/>
|
||||
<include path="fess_dict.xml"/>
|
||||
<include path="fess_job.xml"/>
|
||||
<include path="fess_screenshot.xml"/>
|
||||
|
||||
<include path="crawler/client.xml" />
|
||||
<include path="crawler/mimetype.xml" />
|
||||
|
@ -237,103 +240,7 @@
|
|||
<arg>"Mozilla/5.0 (compatible; Fess/" + org.codelibs.fess.Constants.FESS_VERSION + "; +http://fess.codelibs.org/bot.html)"</arg>
|
||||
</component>
|
||||
|
||||
<component name="adProperties" class="java.util.Properties">
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.factory.initial"</arg>
|
||||
<arg>"com.sun.jndi.ldap.LdapCtxFactory"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.provider.url"</arg>
|
||||
<arg>"ldap://[host]:[port]"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.security.principal"</arg>
|
||||
<arg>"[loginId]@[domain]"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.security.credentials"</arg>
|
||||
<arg>"password"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.ldap.connect.timeout"</arg>
|
||||
<arg>"10000"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.ldap.connect.pool"</arg>
|
||||
<arg>"true"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.connect.pool.timeout"</arg>
|
||||
<arg>"30000"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.connect.pool.debug"</arg>
|
||||
<arg>"all"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
<component name="adRoleHelper" class="org.codelibs.fess.helper.AdRoleHelper">
|
||||
<postConstruct name="setAdProperties">
|
||||
<arg>adProperties</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
<component name="suggestHelper" class="org.codelibs.fess.helper.SuggestHelper">
|
||||
</component>
|
||||
|
||||
<component name="screenShotManager" class="org.codelibs.fess.screenshot.ScreenShotManager">
|
||||
<!--
|
||||
<postConstruct name="add">
|
||||
<arg>htmlScreenShotGenerator</arg>
|
||||
</postConstruct>
|
||||
-->
|
||||
</component>
|
||||
<!--
|
||||
<component name="webDriver" class="org.openqa.selenium.phantomjs.PhantomJSDriver">
|
||||
<arg>
|
||||
<component class="org.openqa.selenium.remote.DesiredCapabilities">
|
||||
<postConstruct name="setCapability">
|
||||
<arg>"phantomjs.binary.path"</arg>
|
||||
<arg>"/usr/bin/phantomjs"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
</arg>
|
||||
<preDestroy name="quit"></preDestroy>
|
||||
</component>
|
||||
<component name="htmlScreenShotGenerator" class="org.codelibs.fess.screenshot.impl.WebDriverGenerator">
|
||||
<property name="webDriver">webDriver</property>
|
||||
<postConstruct name="addCondition">
|
||||
<arg>"mimetype"</arg>
|
||||
<arg>"text/html"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
-->
|
||||
<!--
|
||||
<component name="htmlScreenShotGenerator" class="org.codelibs.fess.screenshot.impl.CommandGenerator">
|
||||
<property name="commandList">
|
||||
{"bash",
|
||||
"/opt/fess/bin/html-screenshot.sh",
|
||||
"${url}",
|
||||
"${outputFile}"}
|
||||
</property>
|
||||
<postConstruct name="addCondition">
|
||||
<arg>"mimetype"</arg>
|
||||
<arg>"text/html"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
-->
|
||||
|
||||
<component name="dictionaryManager" class="org.codelibs.fess.dict.DictionaryManager">
|
||||
<postConstruct name="addCreator">
|
||||
<arg>userDictCreator</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addCreator">
|
||||
<arg>synonymCreator</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
<component name="synonymCreator" class="org.codelibs.fess.dict.synonym.SynonymCreator">
|
||||
</component>
|
||||
<component name="userDictCreator" class="org.codelibs.fess.dict.kuromoji.KuromojiCreator">
|
||||
</component>
|
||||
</components>
|
||||
|
|
|
@ -2,15 +2,10 @@
|
|||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<include path="fess_config.xml"/>
|
||||
<include path="fess_ds.xml"/>
|
||||
<include path="fess_es.xml"/>
|
||||
|
||||
<component name="crawlerProperties" class="org.codelibs.core.misc.DynamicProperties">
|
||||
<arg>
|
||||
org.codelibs.fess.util.ResourceUtil.getConfPath("crawler.properties")
|
||||
</arg>
|
||||
</component>
|
||||
|
||||
<component name="searchLogHelper" class="org.codelibs.fess.helper.impl.SearchLogHelperImpl">
|
||||
<!--
|
||||
<property name="userCheckInterval">5 * 60 * 1000</property>
|
||||
|
|
46
src/main/resources/fess_ad.xml
Normal file
46
src/main/resources/fess_ad.xml
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<component name="adProperties" class="java.util.Properties">
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.factory.initial"</arg>
|
||||
<arg>"com.sun.jndi.ldap.LdapCtxFactory"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.provider.url"</arg>
|
||||
<arg>"ldap://[host]:[port]"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.security.principal"</arg>
|
||||
<arg>"[loginId]@[domain]"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"java.naming.security.credentials"</arg>
|
||||
<arg>"password"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.ldap.connect.timeout"</arg>
|
||||
<arg>"10000"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.ldap.connect.pool"</arg>
|
||||
<arg>"true"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.connect.pool.timeout"</arg>
|
||||
<arg>"30000"</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="put">
|
||||
<arg>"com.sun.jndi.connect.pool.debug"</arg>
|
||||
<arg>"all"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
<component name="adRoleHelper" class="org.codelibs.fess.helper.AdRoleHelper">
|
||||
<postConstruct name="setAdProperties">
|
||||
<arg>adProperties</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
</components>
|
|
@ -2,12 +2,17 @@
|
|||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<include path="fess_config.xml"/>
|
||||
|
||||
<component name="webApiManagerFactory" class="org.codelibs.fess.api.WebApiManagerFactory">
|
||||
<postConstruct name="add">
|
||||
<arg>xmlApiManager</arg>
|
||||
<arg>xmlApiManager</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="add">
|
||||
<arg>jsonApiManager</arg>
|
||||
<arg>jsonApiManager</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="add">
|
||||
<arg>esApiManager</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
|
@ -15,5 +20,7 @@
|
|||
</component>
|
||||
<component name="jsonApiManager" class="org.codelibs.fess.api.json.JsonApiManager">
|
||||
</component>
|
||||
<component name="esApiManager" class="org.codelibs.fess.api.es.EsApiManager">
|
||||
</component>
|
||||
|
||||
</components>
|
||||
|
|
11
src/main/resources/fess_config.xml
Normal file
11
src/main/resources/fess_config.xml
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<component name="crawlerProperties" class="org.codelibs.core.misc.DynamicProperties">
|
||||
<arg>
|
||||
org.codelibs.fess.util.ResourceUtil.getConfPath("crawler.properties")
|
||||
</arg>
|
||||
</component>
|
||||
|
||||
</components>
|
22
src/main/resources/fess_dict.xml
Normal file
22
src/main/resources/fess_dict.xml
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<include path="fess_config.xml"/>
|
||||
|
||||
<component name="dictionaryManager" class="org.codelibs.fess.dict.DictionaryManager">
|
||||
<postConstruct name="addCreator">
|
||||
<arg>userDictCreator</arg>
|
||||
</postConstruct>
|
||||
<postConstruct name="addCreator">
|
||||
<arg>synonymCreator</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
|
||||
<component name="synonymCreator"
|
||||
class="org.codelibs.fess.dict.synonym.SynonymCreator">
|
||||
</component>
|
||||
<component name="userDictCreator"
|
||||
class="org.codelibs.fess.dict.kuromoji.KuromojiCreator">
|
||||
</component>
|
||||
</components>
|
47
src/main/resources/fess_screenshot.xml
Normal file
47
src/main/resources/fess_screenshot.xml
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE components PUBLIC "-//DBFLUTE//DTD LastaDi 1.0//EN"
|
||||
"http://dbflute.org/meta/lastadi10.dtd">
|
||||
<components>
|
||||
<component name="screenShotManager" class="org.codelibs.fess.screenshot.ScreenShotManager">
|
||||
<!--
|
||||
<postConstruct name="add">
|
||||
<arg>htmlScreenShotGenerator</arg>
|
||||
</postConstruct>
|
||||
-->
|
||||
</component>
|
||||
<!--
|
||||
<component name="webDriver" class="org.openqa.selenium.phantomjs.PhantomJSDriver">
|
||||
<arg>
|
||||
<component class="org.openqa.selenium.remote.DesiredCapabilities">
|
||||
<postConstruct name="setCapability">
|
||||
<arg>"phantomjs.binary.path"</arg>
|
||||
<arg>"/usr/bin/phantomjs"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
</arg>
|
||||
<preDestroy name="quit"></preDestroy>
|
||||
</component>
|
||||
<component name="htmlScreenShotGenerator" class="org.codelibs.fess.screenshot.impl.WebDriverGenerator">
|
||||
<property name="webDriver">webDriver</property>
|
||||
<postConstruct name="addCondition">
|
||||
<arg>"mimetype"</arg>
|
||||
<arg>"text/html"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
-->
|
||||
<!--
|
||||
<component name="htmlScreenShotGenerator" class="org.codelibs.fess.screenshot.impl.CommandGenerator">
|
||||
<property name="commandList">
|
||||
{"bash",
|
||||
"/opt/fess/bin/html-screenshot.sh",
|
||||
"${url}",
|
||||
"${outputFile}"}
|
||||
</property>
|
||||
<postConstruct name="addCondition">
|
||||
<arg>"mimetype"</arg>
|
||||
<arg>"text/html"</arg>
|
||||
</postConstruct>
|
||||
</component>
|
||||
-->
|
||||
|
||||
</components>
|
|
@ -1,376 +0,0 @@
|
|||
<!DOCTYPE form-validation PUBLIC
|
||||
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
|
||||
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
|
||||
<!--
|
||||
|
||||
This file contains the default Struts Validator pluggable validator
|
||||
definitions. It should be placed somewhere under /WEB-INF and
|
||||
referenced in the struts-config.xml under the plug-in element
|
||||
for the ValidatorPlugIn.
|
||||
|
||||
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
|
||||
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
|
||||
/WEB-INF/validation.xml"/>
|
||||
</plug-in>
|
||||
|
||||
These are the default error messages associated with
|
||||
each validator defined in this file. They should be
|
||||
added to your projects ApplicationResources.properties
|
||||
file or you can associate new ones by modifying the
|
||||
pluggable validators msg attributes in this file.
|
||||
|
||||
# Struts Validator Error Messages
|
||||
errors.required={0} is required.
|
||||
errors.minlength={0} can not be less than {1} characters.
|
||||
errors.maxlength={0} can not be greater than {1} characters.
|
||||
errors.invalid={0} is invalid.
|
||||
|
||||
errors.byte={0} must be a byte.
|
||||
errors.short={0} must be a short.
|
||||
errors.integer={0} must be an integer.
|
||||
errors.long={0} must be a long.
|
||||
errors.float={0} must be a float.
|
||||
errors.double={0} must be a double.
|
||||
|
||||
errors.date={0} is not a date.
|
||||
errors.range={0} is not in the range {1} through {2}.
|
||||
errors.creditcard={0} is an invalid credit card number.
|
||||
errors.email={0} is an invalid e-mail address.
|
||||
errors.url={0} is an invalid url (web address).
|
||||
|
||||
errors.minbytelength={0} can not be less than {1} bytes.
|
||||
errors.maxbytelength={0} can not be greater than {1} bytes.
|
||||
|
||||
Note: Starting in Struts 1.2.0 the default javascript definitions have
|
||||
been consolidated to commons-validator. The default can be overridden
|
||||
by supplying a <javascript> element with a CDATA section, just as
|
||||
in struts 1.1.
|
||||
|
||||
-->
|
||||
|
||||
<form-validation>
|
||||
|
||||
<global>
|
||||
|
||||
<validator name="required"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateRequired"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
msg="errors.required"/>
|
||||
|
||||
<validator name="requiredif"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateRequiredIf"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
msg="errors.required"/>
|
||||
|
||||
<validator name="validwhen"
|
||||
msg="errors.required"
|
||||
classname="org.apache.struts.validator.validwhen.ValidWhen"
|
||||
method="validateValidWhen"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"/>
|
||||
|
||||
|
||||
<validator name="minlength"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateMinLength"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.minlength"
|
||||
jsFunction="org.apache.commons.validator.javascript.validateMinLength"/>
|
||||
|
||||
|
||||
<validator name="maxlength"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateMaxLength"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.maxlength"
|
||||
jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>
|
||||
|
||||
|
||||
|
||||
<validator name="mask"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateMask"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.invalid"/>
|
||||
|
||||
|
||||
<validator name="byte"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateByte"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.byte"
|
||||
jsFunctionName="ByteValidations"/>
|
||||
|
||||
|
||||
<validator name="short"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateShort"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.short"
|
||||
jsFunctionName="ShortValidations"/>
|
||||
|
||||
|
||||
<validator name="integer"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateInteger"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.integer"
|
||||
jsFunctionName="IntegerValidations"/>
|
||||
|
||||
|
||||
|
||||
<validator name="long"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateLong"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.long"/>
|
||||
|
||||
|
||||
<validator name="float"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateFloat"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.float"
|
||||
jsFunctionName="FloatValidations"/>
|
||||
|
||||
<validator name="double"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateDouble"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.double"/>
|
||||
|
||||
|
||||
<validator name="date"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateDate"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.date"
|
||||
jsFunctionName="DateValidations"/>
|
||||
|
||||
|
||||
<validator name="intRange"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateIntRange"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends="integer"
|
||||
msg="errors.range"/>
|
||||
|
||||
|
||||
<validator name="floatRange"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateFloatRange"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends="float"
|
||||
msg="errors.range"/>
|
||||
|
||||
<validator name="doubleRange"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateDoubleRange"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends="double"
|
||||
msg="errors.range"/>
|
||||
|
||||
<validator name="creditCard"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateCreditCard"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.creditcard"/>
|
||||
|
||||
|
||||
<validator name="email"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateEmail"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.email"/>
|
||||
|
||||
<validator name="url"
|
||||
classname="org.apache.struts.validator.FieldChecks"
|
||||
method="validateUrl"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.url"/>
|
||||
|
||||
<validator name="minbytelength"
|
||||
classname="org.seasar.struts.validator.S2FieldChecks"
|
||||
method="validateMinByteLength"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.minbytelength"/>
|
||||
|
||||
|
||||
<validator name="maxbytelength"
|
||||
classname="org.seasar.struts.validator.S2FieldChecks"
|
||||
method="validateMaxByteLength"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.maxbytelength"/>
|
||||
|
||||
<validator name="longRange"
|
||||
classname="org.seasar.struts.validator.S2FieldChecks"
|
||||
method="validateLongRange"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends="long"
|
||||
msg="errors.range"/>
|
||||
|
||||
<validator name="cronExpression"
|
||||
classname="org.codelibs.fess.validator.CronExpressionChecks"
|
||||
method="validateCronExpression"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.cronexpression"/>
|
||||
|
||||
<validator name="uriType"
|
||||
classname="org.codelibs.fess.validator.UriTypeChecks"
|
||||
method="validateUriType"
|
||||
methodParams="java.lang.Object,
|
||||
org.apache.commons.validator.ValidatorAction,
|
||||
org.apache.commons.validator.Field,
|
||||
org.apache.struts.action.ActionMessages,
|
||||
org.apache.commons.validator.Validator,
|
||||
javax.servlet.http.HttpServletRequest"
|
||||
depends=""
|
||||
msg="errors.uritype"/>
|
||||
|
||||
<!--
|
||||
This simply allows struts to include the validateUtilities into a page, it should
|
||||
not be used as a validation rule.
|
||||
-->
|
||||
<validator name="includeJavaScriptUtilities"
|
||||
classname=""
|
||||
method=""
|
||||
methodParams=""
|
||||
depends=""
|
||||
msg=""
|
||||
jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>
|
||||
|
||||
</global>
|
||||
|
||||
</form-validation>
|
|
@ -14,93 +14,9 @@
|
|||
</jsp:include>
|
||||
|
||||
<div class="content-wrapper">
|
||||
<%-- Content Header --%>
|
||||
<%-- Message --%>
|
||||
<div>
|
||||
<la:info id="msg" message="true">
|
||||
<div class="alert-message info">${msg}</div>
|
||||
</la:info>
|
||||
<la:errors />
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box">
|
||||
<%-- Box Header --%>
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">
|
||||
<la:message key="labels.system_title_system_status" />
|
||||
</h3>
|
||||
</div>
|
||||
<%-- Box Body --%>
|
||||
<div class="box-body">
|
||||
<table class="table table-bordered table-hover table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-3"><la:message
|
||||
key="labels.es_cluster_name" /></th>
|
||||
<td>${f:h(clusterName)}
|
||||
(${f:h(clusterStatus)})</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<la:form>
|
||||
<div class="box">
|
||||
<%-- Box Header --%>
|
||||
<div class="box-header">
|
||||
<h3 class="box-title">
|
||||
<la:message key="labels.crawler_status_title" />
|
||||
</h3>
|
||||
</div>
|
||||
<%-- Box Body --%>
|
||||
<div class="box-body">
|
||||
<%-- Message --%>
|
||||
<table class="table table-bordered table-hover table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-xs-3"><la:message
|
||||
key="labels.crawler_process_running" /></th>
|
||||
<td><c:if test="${crawlerRunning}">
|
||||
<la:message key="labels.crawler_running" />
|
||||
</c:if>
|
||||
<c:if test="${!crawlerRunning}">
|
||||
<la:message key="labels.crawler_stopped" />
|
||||
</c:if></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><la:message key="labels.crawler_process_action" />
|
||||
</th>
|
||||
<td><c:if test="${!crawlerRunning}">
|
||||
<input type="submit" class="btn" name="start"
|
||||
value="<la:message key="labels.crawler_button_start"/>" />
|
||||
</c:if> <c:if test="${crawlerRunning}">
|
||||
<div class="form-inline">
|
||||
<la:select property="sessionId" styleClass="form-control">
|
||||
<option value=""><la:message
|
||||
key="labels.crawler_sessionid_all" /></option>
|
||||
<c:forEach var="runningSessionId"
|
||||
items="${runningSessionIds}">
|
||||
<option value="${f:h(runningSessionId)}">${f:h(runningSessionId)}</option>
|
||||
</c:forEach>
|
||||
</la:select>
|
||||
<input type="submit" class="btn" name="stop"
|
||||
value="<la:message key="labels.crawler_button_stop"/>" />
|
||||
</div>
|
||||
</c:if></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</la:form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<iframe src="<%=request.getContextPath()%>/admin/server/_plugin/kopf/" width="100%" height="800" seamless></iframe>
|
||||
</div>
|
||||
|
||||
<jsp:include page="/WEB-INF/view/common/admin/footer.jsp"></jsp:include>
|
||||
</div>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/foot.jsp"></jsp:include>
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!DOCTYPE html>
|
||||
<% try{ %>
|
||||
<html>
|
||||
<head>
|
||||
<head profile="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="content-style-type" content="text/css" />
|
||||
<meta http-equiv="content-script-type" content="text/javascript" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title><la:message key="labels.system_error_title" /></title>
|
||||
<link href="${f:url('/css/style-base.css')}" rel="stylesheet"
|
||||
type="text/css" />
|
||||
|
@ -17,7 +17,7 @@
|
|||
<div class="container">
|
||||
<div class="content">
|
||||
<div class="center row">
|
||||
<div class="span10">
|
||||
<div class="col-md-12">
|
||||
<h2>
|
||||
<la:message key="labels.request_error_title" />
|
||||
</h2>
|
||||
|
@ -27,6 +27,7 @@
|
|||
</div>
|
||||
<jsp:include page="footer.jsp" />
|
||||
</div>
|
||||
<input type="hidden" id="contextPath" value="<%=request.getContextPath()%>" />
|
||||
<script type="text/javascript"
|
||||
src="${f:url('/js/jquery-2.1.4.min.js')}"></script>
|
||||
<script type="text/javascript" src="${f:url('/js/bootstrap.js')}"></script>
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
<c:import url="${viewPrefix}/common/header.jsp">
|
||||
<c:param name="title" value="エラー通知"/>
|
||||
</c:import>
|
||||
<div class="contents">
|
||||
<h2><la:message key="labels.header.title.error.message"/></h2>
|
||||
<html:errors/>
|
||||
<div class="listback">
|
||||
<la:link href="/member/list/">会員一覧へ</la:link>
|
||||
</div>
|
||||
</div>
|
||||
<c:import url="${viewPrefix}/common/footer.jsp"/>
|
|
@ -1,9 +1,8 @@
|
|||
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
|
||||
<hr/>
|
||||
<footer class="footer">
|
||||
<div id="footer" class="row center">
|
||||
<p class="left"></p>
|
||||
<p class="right">
|
||||
<footer class="bd-footer text-muted" role="contentinfo">
|
||||
<div id="footer" class="container center">
|
||||
<p>
|
||||
<la:message key="labels.footer.copyright" />
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -1,124 +1,126 @@
|
|||
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
|
||||
<form action="${contextPath}/search" method="get">
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand" href="${contextPath}/">
|
||||
<img src="${f:url('/images/logo-head.gif')}"
|
||||
alt="<la:message key="labels.header_brand_name" />" />
|
||||
</a>
|
||||
<div class="navbar-form pull-right">
|
||||
<input type="text" name="query" maxlength="1000" id="query" />
|
||||
<button class="btn medium btn-primary" type="submit" name="search"
|
||||
id="searchButton">
|
||||
<la:form action="/search" method="get" styleId="searchForm" styleClass="searchResultForm">
|
||||
${fe:facetForm()}${fe:geoForm()}
|
||||
<nav class="navbar navbar-dark bg-inverse navbar-static-top pos-f-t">
|
||||
<la:link styleClass="navbar-brand" href="/">
|
||||
<img src="${f:url('/images/logo-head.gif')}" alt="<la:message key="labels.header_brand_name" />" />
|
||||
</la:link>
|
||||
<div class="form-inline navbar-form pull-right">
|
||||
<la:text property="query" maxlength="1000" styleId="query" styleClass="form-control" autocomplete="off"/>
|
||||
<button class="btn medium btn-primary" type="submit" name="search" id="searchButton">
|
||||
<i class="icon-search icon-white"></i><span class="hidden-phone"><la:message key="labels.search" /></span>
|
||||
</button>
|
||||
<a href="#searchOptions" role="button" class="btn btn-secondary" data-toggle="modal"><i class="icon-cog"></i><span
|
||||
class="hidden-phone"
|
||||
><la:message key="labels.header_form_option_btn" /></span></a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="modal fade" id="searchOptions" tabindex="-1" role="dialog" aria-labelledby="searchOptionsLabel"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span> <span class="sr-only">Close</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="searchOptionsLabel">
|
||||
<la:message key="labels.search_options" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<fieldset class="form-group">
|
||||
<label for="contentNum"><la:message key="labels.index_num" /></label>
|
||||
<la:select property="num" styleId="numSearchOption" styleClass="form-control" style="display:block;">
|
||||
<option value="">
|
||||
<la:message key="labels.search_result_select_num" />
|
||||
</option>
|
||||
<la:option value="10">10</la:option>
|
||||
<la:option value="20">20</la:option>
|
||||
<la:option value="30">30</la:option>
|
||||
<la:option value="40">40</la:option>
|
||||
<la:option value="50">50</la:option>
|
||||
<la:option value="100">100</la:option>
|
||||
</la:select>
|
||||
</fieldset>
|
||||
<fieldset class="form-group">
|
||||
<label for="contentSort"><la:message key="labels.index_sort" /></label>
|
||||
<la:select property="sort" styleId="sortSearchOption" styleClass="form-control" style="display:block;">
|
||||
<option value="">
|
||||
<la:message key="labels.search_result_select_sort" />
|
||||
</option>
|
||||
<la:option value="created.asc">
|
||||
<la:message key="labels.search_result_sort_created_asc" />
|
||||
</la:option>
|
||||
<la:option value="created.desc">
|
||||
<la:message key="labels.search_result_sort_created_desc" />
|
||||
</la:option>
|
||||
<la:option value="contentLength.asc">
|
||||
<la:message key="labels.search_result_sort_contentLength_asc" />
|
||||
</la:option>
|
||||
<la:option value="contentLength.desc">
|
||||
<la:message key="labels.search_result_sort_contentLength_desc" />
|
||||
</la:option>
|
||||
<la:option value="lastModified.asc">
|
||||
<la:message key="labels.search_result_sort_lastModified_asc" />
|
||||
</la:option>
|
||||
<la:option value="lastModified.desc">
|
||||
<la:message key="labels.search_result_sort_lastModified_desc" />
|
||||
</la:option>
|
||||
<c:if test="${searchLogSupport}">
|
||||
<la:option value="clickCount_l_x_dv.asc">
|
||||
<la:message key="labels.search_result_sort_clickCount_asc" />
|
||||
</la:option>
|
||||
<la:option value="clickCount_l_x_dv.desc">
|
||||
<la:message key="labels.search_result_sort_clickCount_desc" />
|
||||
</la:option>
|
||||
</c:if>
|
||||
<c:if test="${favoriteSupport}">
|
||||
<la:option value="favoriteCount_l_x_dv.asc">
|
||||
<la:message key="labels.search_result_sort_favoriteCount_asc" />
|
||||
</la:option>
|
||||
<la:option value="favoriteCount_l_x_dv.desc">
|
||||
<la:message key="labels.search_result_sort_favoriteCount_desc" />
|
||||
</la:option>
|
||||
</c:if>
|
||||
</la:select>
|
||||
</fieldset>
|
||||
<fieldset class="form-group">
|
||||
<label for="contentLang"><la:message key="labels.index_lang" /></label>
|
||||
<la:select property="lang" styleId="langSearchOption" multiple="true" styleClass="form-control">
|
||||
<c:forEach var="item" items="${langItems}">
|
||||
<la:option value="${f:u(item.value)}">
|
||||
${f:h(item.label)}
|
||||
</la:option>
|
||||
</c:forEach>
|
||||
</la:select>
|
||||
</fieldset>
|
||||
<c:if test="${displayLabelTypeItems}">
|
||||
<fieldset class="form-group">
|
||||
<label for="contentLabelType"><la:message key="labels.index_label" /></label>
|
||||
<la:select property="fields.label" styleId="labelTypeSearchOption" multiple="true" styleClass="form-control">
|
||||
<c:forEach var="item" items="${labelTypeItems}">
|
||||
<la:option value="${f:u(item.value)}">
|
||||
${f:h(item.label)}
|
||||
</la:option>
|
||||
</c:forEach>
|
||||
</la:select>
|
||||
</fieldset>
|
||||
</c:if>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" id="searchOptionsClearButton">
|
||||
<la:message key="labels.search_options_clear" />
|
||||
</button>
|
||||
<button class="btn btn-secondary" data-dismiss="modal" aria-hidden="true">
|
||||
<la:message key="labels.search_options_close" />
|
||||
</button>
|
||||
<button class="btn btn-primary" type="submit">
|
||||
<la:message key="labels.search" />
|
||||
</button>
|
||||
<a href="#searchOptions" role="button" class="btn"
|
||||
data-toggle="modal"><la:message
|
||||
key="labels.header_form_option_btn" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal hide fade" id="searchOptions">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-hidden="true">×</button>
|
||||
<h3>
|
||||
<la:message key="labels.search_options" />
|
||||
</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<fieldset>
|
||||
<div class="clearfix">
|
||||
<label for="contentNum"><la:message
|
||||
key="labels.index_num" /></label>
|
||||
<div class="input">
|
||||
<select name="num" id="contentNum"
|
||||
class="span4" style="display:block;">
|
||||
<option value="">
|
||||
<la:message key="labels.search_result_select_num" />
|
||||
</option>
|
||||
<option value="10">10</option>
|
||||
<option value="20">20</option>
|
||||
<option value="30">30</option>
|
||||
<option value="40">40</option>
|
||||
<option value="50">50</option>
|
||||
<option value="100">100</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
<label for="contentSort"><la:message
|
||||
key="labels.index_sort" /></label>
|
||||
<div class="input">
|
||||
<select name="sort" id="contentSort"
|
||||
class="span4" style="display:block;">
|
||||
<option value="">
|
||||
<la:message key="labels.search_result_select_sort" />
|
||||
</option>
|
||||
<option value="created.asc">
|
||||
<la:message key="labels.search_result_sort_created_asc" />
|
||||
</option>
|
||||
<option value="created.desc">
|
||||
<la:message key="labels.search_result_sort_created_desc" />
|
||||
</option>
|
||||
<option value="contentLength.asc">
|
||||
<la:message key="labels.search_result_sort_contentLength_asc" />
|
||||
</option>
|
||||
<option value="contentLength.desc">
|
||||
<la:message key="labels.search_result_sort_contentLength_desc" />
|
||||
</option>
|
||||
<option value="lastModified.asc">
|
||||
<la:message key="labels.search_result_sort_lastModified_asc" />
|
||||
</option>
|
||||
<option value="lastModified.desc">
|
||||
<la:message key="labels.search_result_sort_lastModified_desc" />
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
<label for="contentLang"><la:message
|
||||
key="labels.index_lang" /></label>
|
||||
<div class="input">
|
||||
<select name="lang"
|
||||
id="langSearchOption" multiple="true"
|
||||
class="span4">
|
||||
<c:forEach var="item" items="${langItems}">
|
||||
<option value="${f:u(item.value)}">
|
||||
${f:h(item.label)}
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${displayLabelTypeItems}">
|
||||
<div class="clearfix">
|
||||
<label for="contentLabelType"><la:message
|
||||
key="labels.index_label" /></label>
|
||||
<div class="input">
|
||||
<select name="fields.label" id="contentLabelType"
|
||||
multiple="true" class="span4">
|
||||
<c:forEach var="item" items="${labelTypeItems}">
|
||||
<option value="${f:u(item.value)}">
|
||||
${f:h(item.label)}
|
||||
</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" id="searchOptionsClearButton">
|
||||
<la:message key="labels.search_options_clear" />
|
||||
</button>
|
||||
<button class="btn" data-dismiss="modal" aria-hidden="true">
|
||||
<la:message key="labels.search_options_close" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</la:form>
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="content-style-type" content="text/css" />
|
||||
<meta http-equiv="content-script-type" content="text/javascript" />
|
||||
<head profile="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title><la:message key="labels.system_error_title" /></title>
|
||||
<link href="${f:url('/css/style-base.css')}" rel="stylesheet"
|
||||
type="text/css" />
|
||||
|
@ -16,7 +16,7 @@
|
|||
<div class="container">
|
||||
<div class="content">
|
||||
<div class="center row">
|
||||
<div class="span10">
|
||||
<div class="col-md-12">
|
||||
<h2>
|
||||
<la:message key="labels.page_not_found_title" />
|
||||
</h2>
|
||||
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<jsp:include page="footer.jsp" />
|
||||
</div>
|
||||
<input type="hidden" id="contextPath" value="<%=request.getContextPath()%>" />
|
||||
<script type="text/javascript"
|
||||
src="${f:url('/js/jquery-2.1.4.min.js')}"></script>
|
||||
<script type="text/javascript" src="${f:url('/js/bootstrap.js')}"></script>
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!DOCTYPE html>
|
||||
<% try{ %>
|
||||
<html>
|
||||
<head>
|
||||
<head profile="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="content-style-type" content="text/css" />
|
||||
<meta http-equiv="content-script-type" content="text/javascript" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title><la:message key="labels.system_error_title" /></title>
|
||||
<link href="${f:url('/css/style-base.css')}" rel="stylesheet"
|
||||
type="text/css" />
|
||||
|
@ -17,7 +17,7 @@
|
|||
<div class="container">
|
||||
<div class="content">
|
||||
<div class="center row">
|
||||
<div class="span10">
|
||||
<div class="col-md-12">
|
||||
<h2>
|
||||
<la:message key="labels.system_error_title" />
|
||||
</h2>
|
||||
|
@ -27,6 +27,7 @@
|
|||
</div>
|
||||
<jsp:include page="footer.jsp" />
|
||||
</div>
|
||||
<input type="hidden" id="contextPath" value="<%=request.getContextPath()%>" />
|
||||
<script type="text/javascript"
|
||||
src="${f:url('/js/jquery-2.1.4.min.js')}"></script>
|
||||
<script type="text/javascript" src="${f:url('/js/bootstrap.js')}"></script>
|
||||
|
|
Loading…
Add table
Reference in a new issue