-2

我正在尝试从h:commandLinkJSF 中调用托管 bean。但我没有href在呈现的 HTMLa标记中看到属性。

我错过了什么吗?

有一个使用方法调用的AccountSetupControllerManagedBean 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>

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

我错过了什么吗?

4

1 回答 1

3

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

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

总而言之,阅读<h:commandLink>文档毫无疑问会有很大帮助(所有重点都是我的):

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

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

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

于 2013-07-24T07:47:59.723 回答