Мне нужна кнопка, которая возвращает пользователя на определенную страницу, и для этой цели я поместил h: outputLink внутри h: commandButton, как показано ниже:
<h:commandButton styleClass = "richButtonLogout">
<h:outputLink value = "/pages/somePage.xhtml">
SomePage
</h:outputLink>
Я ожидал, что кнопка приведет меня на указанную страницу при нажатии, но вместо этого я вижу отдельную кнопку и отдельную ссылку в браузере. Итак, ссылка находится за пределами кнопки. Кнопка ничего не делает, а ссылка работает нормально. Подобный подход отлично работает с html, поэтому я подумал, что это будет нормально.





Нет, вы не можете поместить outputLink внутрь commandButton. Это отдельные компоненты, не связанные и не зависящие друг от друга.
Если вы хотите, чтобы кнопка функционировала как ссылка, вы можете использовать компонент JSF h:button в сочетании с атрибутом outcome, например, так,
<h:button outcome = "..."/>
Однако обратите внимание, что, хотя он действительно работает, компонент JSF button использует JavaScript для достижения этой навигации - так что это не обычная ссылка, как вы могли бы ожидать. Поскольку это результаты навигации (а не ссылки), одним из преимуществ этого метода является то, что вы можете использовать статические результаты и динамически определять свои правила навигации в faces-config.xml.
Очевидно, чтобы получить простую старую ссылку, вы также можете просто использовать обычный <a href = "..."> с соответствующим стилем кнопок для достижения того же конечного результата.
И использование простого html вместо неправильного использования (злоупотребления) компонентов JSF - очень правильная вещь.
Невозможно сделать в обычном HTML, поэтому нельзя сделать в JSF. Почему бы просто не использовать действие вашей кнопки?