JSF中的commandlink没有生成预期的HTML标记

问题描述 投票:-2回答:1

我正在尝试从JSF中的h:commandLink调用托管bean。但是我没有在渲染的HTML href标签中看到a属性。

我错过了什么吗?

有一个名为AccountSetupController的ManagedBean,其中包含signUp方法。

这是我在JSF中使用的标记:

  <h:form prependId="false">
    <h:commandLink  action="#{accountSetupController.signUp()}" 
         value="#{msg['homepage.createaccount']}" styleClass="button large">
    </h:commandLink>
  </h:form>

这是渲染的标签。看到href属性中没有任何内容。

 <a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt15'),
  {'j_idt33':'j_idt33'},'');return false" 
  class="button large">CREATE MY ACCOUNT</a>

这是生成的表单标记

    <form id="j_idt15" name="j_idt15" 
    method="post" action="/myproject/faces/homepage/homepage.xhtml" 
    enctype="application/x-www-form-urlencoded">       .... </form>

如您所见,表单操作指向一些我不需要的地方。

我错过了什么吗?

jsf href commandlink
1个回答
2
投票

JSF中的命令链接以这种方式呈现。表格将由JSF通过JavaScript的onclick方法使用JSF JS库提交,而href将始终保持#

此外,由于可理解的原因,您将无法在浏览器工具中找到绑定的操作/操作侦听器方法名称。相反,JSF将在服务器上找到被点击链接的id,并将触发所有组件的操作(侦听器)。

总而言之,阅读<h:commandLink>文档毫不奇怪地帮助了很多(所有强调我的):

一般行为:编码和解码行为都需要能够获取隐藏字段的id / name,该字段可以在标记中呈现,也可以通过客户端DOM操作以编程方式添加,其值由JavaScript表单提交(进一步称为hiddenFieldName。

解码行为:获取组件的“clientId”属性。从ExternalContext的“requestParameterMap”属性获取Map。如上导出hiddenFieldName。获取hiddenFieldName键下的Map中的条目。如果没有条目,或者条目是空字符串,或者条目不等于“clientId”属性的值,则立即返回。如果有一个条目,并且其值等于“clientId”属性的值,则在组件周围创建一个新的javax.faces.event.ActionEvent实例,并在组件上调用queueActionEvent(),并传递该事件。

编码行为:将“#”渲染为“href”属性的值。如果指定了组件的当前值,则将其呈现为链接文本。渲染与“onclick”属性的值在功能上等效于以下内容的JavaScript:document.forms ['CLIENT_ID'] ['hiddenFieldName']。value ='CLIENT_ID'; 。ocument.forms [ 'CLIENT_ID'] [ 'PARAM1_NAME']值= 'PARAM1_VALUE'; 。document.forms [ 'CLIENT_ID'] [ 'PARAM2_NAME']值= 'PARAM2_VALUE';返回false; document.forms ['CLIENT_ID']。submit()“其中hiddenFieldName如上所述,CLIENT_ID是UICommand组件的clientId,PARAM * _NAME和PARAM * _VALUE分别是任何嵌套的UIParameter子节点的名称和值。

© www.soinside.com 2019 - 2024. All rights reserved.