Симптомы проблемы указывают на ошибку общего стартера: объявить его непосредственным ребенком <h:panelGrid>
. Как так:
<h:panelGrid columns="1">
<h:inputText ... />
<h:inputText ... />
<h:inputHidden ... />
<h:inputText ... />
</h:panelGrid>
<h:panelGrid>
генерирует HTML <table>
и as documented, это поставит каждый непосредственный ребенок в своей ячейке таблицы <td>
. Сгенерированный HTML выглядит следующим образом:
<table>
<tbody>
<tr><td><input type="text" /></td></tr>
<tr><td><input type="text" /></td></tr>
<tr><td><input type="hidden" /></td></tr>
<tr><td><input type="text" /></td></tr>
</tbody>
</table>
<td>
имеет по умолчанию некоторые поля и отступы, которая полностью объясняет вашу проблему. Вы должны были заметить это при проверке вывода HTML и стилей CSS в встроенном наборе инструментов разработчика (нажмите F12 или rightclick, Inspect Element).
Вы в основном хотите сгруппировать <h:inputHidden>
вместе с нужным <h:inputText>
внутри той же ячейки таблицы. Вы можете использовать для этого <h:panelGroup>
.
<h:panelGrid columns="1">
<h:inputText ... />
<h:panelGroup>
<h:inputText ... />
<h:inputHidden ... />
</h:panelGroup>
<h:inputText ... />
</h:panelGrid>
Это в конечном итоге в сгенерированном выходе HTML, как показано ниже, именно так, как вы intented:
<table>
<tbody>
<tr><td><input type="text" /></td></tr>
<tr><td><input type="text" /><input type="hidden" /></td></tr>
<tr><td><input type="text" /></td></tr>
</tbody>
</table>
неродственных к конкретной задаче, используя таблицы для разметки и позиционирования плохо , Используйте divs и CSS.
Это не поведение по умолчанию, и причина проблемы не отображается в опубликованной до сих пор информации. Пожалуйста, http://stackoverflow.com/help/mcve. На данный момент я могу только сделать обоснованное предположение, что это вызвано одной из самых распространенных ошибок стартера: поместить его в сетку панели (по крайней мере, просто глядя в сгенерированный HTML-код выход должен давать подсказки). – BalusC