我想将一个带有 id 的标签和一个带有 id 的输入字段添加到面板组(布局框),它有自己的 id。 我希望标签和输入字段具有以下 ID:(viewid):(formid):(panelgroupid):(own id) 但不知何故,panelgroupid (fachlich1) 没有传递给 children 。
<form id="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3" …>
<div id="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3:fachlich1">
<label id="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3:label" for="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3:value">Bla</label>
<input id="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3:value" type="text" value="Blubb34534" name="viewns_Z7_6PQJDK4JGD09F0I34QTLQH2015_:j_id_3:value">
</div>
</form>
知道我可能做错了什么吗? :(
感谢您的帮助!
编辑:
我想创建我自己的组件,它基本上由周围的 div + 标签 + inputtext 组成。 我从 HtmlPanelGroup 扩展并覆盖 encodeBegin 方法,我将布局设置为 block ,设置面板组的 ID,添加组件,之后调用 super.encodeBegin:
public void encodeBeginn(FacesContext context)
{
setLayout("block");
setId(getId());
HtmlOutputLabel label = new HtmlOutputLabel();
label.setId("label");
label.setFor("value");
label.setValue(getLabel());
getChildren().add(label);
HtmlInputText text = new HtmlInputText();
text.setId("value");
text.setValue(getValue());
getChildren().add(text);
super.encodeBeginn(context)
}
最佳答案
只有 NamingContainer
的实现接口(interface)会将其自己的 ID 添加到其子代的 ID 之前。根据 javadoc它是以下组件:
All Known Implementing Classes:
HtmlPanelGroup
, 由 <h:panelGroup>
支持, 不在其中。在标准 JSF 中,只有 <h:dataTable>
和 <h:form>
实现它。在标准 Facelets 中,只有 <ui:repeat>
也实现了它(通过 UINamingContainer
)。
这应该不构成任何技术问题。如果您认为您的具体问题(您在问题中没有提及任何内容)是由此引起的,那么您可能找到了错误的原因,并且必须从不同的方向寻找具体问题的原因。
关于java - JSF:HtmlPanelGroup 中的子 ID 不正确(忽略 HtmlPanelGroupId),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294869/