Как изменить заголовок в форматтере opencms jsp?

Я использую opencms 8.5.4. У меня есть средство форматирования opencms (файл jsp), в котором я вычисляю некоторые переменные, которые я хочу использовать для изменения описания метатегов и заголовка. Как лучше всего это сделать?

Редактировать: просто для записи, я не нашел способ сделать это из форматтера. Я переместил логику в шаблон в момент рисования головы вместо того, чтобы делать это внутри форматтера. Позже я использовал request.setAttribute для хранения переменных, если они повторно использовались внутри средства форматирования.


person irbian    schedule 26.03.2014    source источник
comment
Откуда берутся переменные? Это свойства страницы? Или переменные форматера? Ваш вопрос, как читать эти переменные или куда их поместить, то есть pageContext.setAttribute(), request.setAttribute()   -  person Mathias Conradt    schedule 27.03.2014
comment
Они вычисляются внутри форматтера через вызов API. Предположим, что у меня есть контейнерная страница test.html с форматером formatter.jsp. Я посещаю страницу test.html?val=1 и вычисляю заголовок страницы на основе значения val=1 в formatter.jsp. Поэтому я хочу использовать этот новый заголовок в качестве заголовка страницы контейнера.   -  person irbian    schedule 27.03.2014
comment
Пытались ли вы поместить переменную в атрибут pageContext или запроса в средстве форматирования, то есть pageContext.setAttribute(title, Some title) или request.setAttribute(title, Some title), а затем снова получить ее со страницы контейнера: request. getAttribute(заголовок) или pageContext.getAttribute(заголовок). Я не пробовал, но я предполагаю, что шаблоны форматирования обрабатываются до шаблона контейнера, поэтому, возможно, стоит попробовать, но не уверен на 100%.   -  person Mathias Conradt    schedule 27.03.2014
comment
Проблема в том, что у меня нет большого контроля над страницей контейнера. Я просматриваю код, и похоже, что заголовок читается из ‹cms:info property=opencms.title /> Итак, если я могу изменить это свойство в форматтере, и вы правы в том, что форматтер обрабатывается до контейнер, он может работать.   -  person irbian    schedule 27.03.2014
comment
Вы имеете в виду, что вы не можете изменить исходный код страницы контейнера? Если у вас есть, вы, конечно, можете просто заменить тег своим собственным фрагментом кода, получив его из запроса или атрибута pageContext. У меня нет другой идеи. Свойство opencms.title извлекается из постоянного свойства, что означает, что вам нужно будет изменить свойство страницы контейнера при каждом запросе страницы. И если вычисление переменной является динамическим, а шаблон страницы контейнера используется несколько раз, это не будет работать, если страница читается одновременно несколько раз и когда переменная различается.   -  person Mathias Conradt    schedule 27.03.2014
comment
Точно. Априори я не могу изменить этот код, потому что моя работа связана с форматированием. Я сделаю тест, чтобы увидеть, является ли этот request.setAttribute опцией.   -  person irbian    schedule 27.03.2014
comment
Что ж, я продолжаю тестировать это, но кажется, что request.setAttribute(title, Some title) в файле head.jsp не работает, когда обрабатывается переменная равна нулю.   -  person irbian    schedule 27.03.2014
comment
Для справки, я, наконец, смог получить доступ к остальной части шаблона, поэтому я переместил логику в голову и передал необходимые переменные через request.setAttribute.   -  person irbian    schedule 19.06.2014


Ответы (1)


Предположим, вы находитесь в шаблоне и отправляете параметр с помощью get или post.

<Title>
<c:choose>
<c:when test="${not empty param.val}>
${param.val}
</c:when>
<c:otherwise>
<cms:info property="opencms.title" />
</c:otherwise>
</c:choose>
</Title>

также вы можете использовать
request.getParameter("val");
do something
Вам нужно загрузить страницу, чтобы увидеть изменения, почему? потому что вы находитесь в другом средстве форматирования, которого нет в заголовке или шаблоне средства форматирования
Свойство предназначено только для получения набора заголовков на странице контейнера, вам не нужно изменять заголовок страницы контейнера, чтобы показать его для какого-либо случайного пользователя . также, если вы хотите изменить заголовок страницы контейнера с помощью кода, используйте setValue, посмотрите в API (только что нашел для 9.0.1)

Если вы измените свойство страницы контейнера, оно будет изменено для всех пользователей!

person FAC    schedule 04.07.2014