Можно ли изменить разделитель идентификатора элемента в 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" /> - т.е. вы не сможете использовать имя автоматически сгенерированного контейнера (ов).

Я бы посоветовал против такой вещи - я не вижу веской причины, почему : следует изменить на -

Другие вопросы по тегам