有谁见过这个h:commandLink行为?

时间:2010-06-03 19:13:10

标签: jsf commandlink

我有一个非常简单的JSF表单:

<h:form id="simpleSearch">
    <h:inputText id="surname" value="#{myBean.surname}" required="true" />
    <h:commandLink>Search</h:commandLink>
</h:form>

渲染此页面时,生成的锚点如下所示(为简洁起见,我删除了生成的onclick代码):

Search<a href="#" onclick="..."></a>

如您所见,“搜索”位于锚点之外,锚点主体为空。这对我来说没用。我不能用这个。

是否有任何建议/参考/奇迹可以帮助我修复/了解这里发生的事情?

谢谢!

2 个答案:

答案 0 :(得分:4)

您正在混合HTML和JSF组件。这通常不适用于JSP。您希望将“搜索”文本放在h:outputText组件中:

<h:commandLink><h:outputText value="Search" /></h:commandLink>

答案 1 :(得分:3)

在旧版JSF 1.0 / 1.1中,任何模板文本在 JSF组件树之前呈现。您需要在<f:verbatim>中包装模板文本以将其置于JSF组件树中。但h:outputText的使用更为常见,除非它是纯HTML。 E.g。

<f:verbatim><h1>Title</h1></f:verbatim>

否则,您需要将escape的{​​{1}}属性设置为false才能避免转义:

h:outputText

在JSF 1.2及更新版本中,使用改进的视图处理程序,您可以只使用模板文本“通常的方式”,它将按照您对编码的期望自动在组件树中进行。

所以,这个问题表明你“仍在”使用旧版JSF 1.0 / 1.1。如果可以的话,我宁愿建议至少升级到JSF 1.2。您可以在任何Servlet 2.4兼容容器上使用它。 JSF 1.2和Servlet 2.4在4年前发布。那是很久以前的事了。