以前在<table>
表单中使用JSF
标记。我注意到最好使用panelGrid
标记代替它,因为它更容易使用和更简单。
之前,我为<td>
标记使用了额外的<h:message >
,并将其宽度设置为300
,以防止在消息出现时表单向左移动。
现在,我正在使用width
标记的<h:panelGrid>
属性,但这不是我的愿望。
当出现任何错误消息时,整个表单向左移动,然后消息显示在每个input text
的前面。
我使用width
标记的message
属性,但效果不佳。
我是否应该返回使用<table>
代替<h:panedGrid>
?
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Facelet gg</title>
</h:head>
<h:body>
<center>
<h:form>
<h:panelGrid columns="3" width="400">
<h:outputLabel value="Username:"/>
<h:inputText id="username" value="#{loginBean.username}" required="true">
<f:validateLength maximum="30" minimum="3"/>
</h:inputText>
<h:message for="username" />
<h:commandButton value="submit" action="home"/>
</h:panelGrid>
</h:form>
</center>
</h:body>
</html>
答案 0 :(得分:3)
这是正常行为,因为width
的{{1}}属性适用于整个表格,而不适用于特定列,您可以检查其中的h:panelGrid
width
columnClasses
}}
但是,您可以通过使用属性style.css
为列定义CSS类来为每列指定css
:
将应用于的CSS样式类的逗号分隔列表 这个表的列。空格分隔的类列表也可以是 为任何单个列指定。如果这个元素的数量 list小于UIData的实际列子节点数, 不#34;班&#34;为每列大于该数字输出属性 列表中的元素。如果列表中的元素数量是 大于UIData的实际列子节点数 最后一列之后的列表中位置的元素 忽略。
因此,在您的示例中,假设您的 .firstColumn {
width: 100px;
}
.secondColumn {
width: 100px;
}
.thirdColumn {
width: 300px;
}
库中有<h:outputStylesheet library="css" name="styles.css"/>
个文件,您可以在其中添加以下内容:
h:panelGrid
使用以下内容包含您的css文件后
<h:panelGrid columns="3" columnClasses="firstColumn,secondColumn,thirdColumn ">
<h:outputLabel value="Username:"/>
<h:inputText id="username" value="#{loginBean.username}" required="true">
<f:validateLength maximum="30" minimum="3"/>
</h:inputText>
<h:message for="username" />
<h:commandButton value="submit" action="home"/>
</h:panelGrid>
您可以在{{1}}中使用它,如下所示:
{{1}}