Можно ли изменить разделитель идентификатора элемента в JSF?
Например, следующий фрагмент:
<h:form id="levelone">
<h:inputText id="leveltwo" value="Test" />
</h:form>
генерирует следующую разметку:
<form id="levelone" name="levelone" method="post" action="/test/testPage.html"
enctype="application/x-www-form-urlencoded">
<input id="levelone:leveltwo" type="text" name="levelone:leveltwo"
value="Test" />
</form>
Можно ли изменить автоматически сгенерированные идентификаторы, чтобы использовать другой разделитель, чем двоеточие?
Например, я хотел бы изменить
levelone:leveltwo
в
levelone-leveltwo
Фон
В нашем веб-приложении мы используем фреймворк для приложений Mojo JavaScript, и он не похож на двоеточия в идентификаторах.
3 ответа
Это невозможно в JSF 1.x, но, начиная с JSF 2.x, вы можете определить его в web.xml
как init-param
из javax.faces.SEPARATOR_CHAR
,
Тем не менее, я думаю, что вы просто хотели изменить его, потому что вы хотите, чтобы ваш CSS работал, не так ли? Толстая кишка :
а именно специальный символ в идентификаторах CSS, он представляет псевдоселектор. Если эта причина верна для вас, то было бы полезно узнать, что вы можете экранировать специальные символы в CSS обычным способом, \
,
Так, например,
#levelone\:leveltwo {
color: blue;
}
должен работать для обычных браузеров (для IE6/7 вам нужно #levelone\3A leveltwo
вместо).
То же самое относится, когда вы намереваетесь использовать его с jQuery или любым другим фреймворком JavaScript, который выбирает элементы с помощью селекторов CSS:
var leveltwo = $('#levelone\\:leveltwo');
Кроме того, вы также можете просто дать ему styleClass
который вы в свою очередь можете соотнести с классом CSS. Так, например,
<h:inputText styleClass="myinput" />
который генерирует
<input type="text" class="myinput" />
может быть стилизован с
.myinput {
color: blue;
}
Смотрите также
В старых версиях нет, это не возможно. Это жестко закодированная константа. В 2.0 вы можете изменить это. Смотрите этот пост в блоге.
Томагавк имеет расширенные компоненты, такие как <t:inputText>
которые имеют forceId
приписывать. Там вы должны будете установить его как <t:inputText forceId="levelone-leveltwo" />
- т.е. вы не сможете использовать имя автоматически сгенерированного контейнера (ов).
Я бы посоветовал против такой вещи - я не вижу веской причины, почему :
следует изменить на -