JSF - 关于UIComponent操作的两个问题

时间:2010-12-01 16:43:59

标签: jsf jsf-2 action facelets

所以,让我告诉我们我的麻烦:)

1 - 当我点击命令按钮

<h:commandButton value="Somethings">
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax render="rendering"/>
</h:commandButton>

我没有对commandButton执行任何操作。我发起了ajax电话。如果我在按钮上添加一个动作(如action="bean.myAction),它将在JSF生命周期的5°阶段执行(好吧,只有当我在f:ajax中写了event =“action”,但那是默认的)。对?但f:ajax是通过默认按钮上的cliccing来触发的?因为对于ListBox,例如,只有当我写了event =“change”时才会触发它(同样,我不应该写它,因为它是默认值)。

2 - 当我点击图片

<h:graphicImage value="img/img.png" alt="img">
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax event="onclick" render="rendering"/>
</h:graphicImage>

这不起作用。为什么呢?

像往常一样,感谢您的帮助!!!!

1 个答案:

答案 0 :(得分:1)

  

1 - 当我点击命令按钮

时      

我不对commandButton做任何动作。我发起了ajax电话。如果我在按钮上添加一个动作(如action =“bean.myAction),它将在JSF生命周期的5°阶段执行

f:setPropertyActionListener也将在第5阶段执行。

  

(好的,只有我在f:ajax中写了event =“action”,但那是默认的)。对?但f:ajax是通过默认按钮上的cliccing来触发的?因为对于ListBox,例如,只有当我写了event =“change”时才会触发它(同样,我不应该写它,因为它是默认值)。

f:ajax只是将行为从同步提交更改为异步(部分)提交。它通过为父组件的所需事件属性(例如onclickonchange等)生成一些额外的JavaScript代码来实现,查看webbrowser中生成的HTML输出。它不会改变JSF生命周期中的任何内容。只有渲染的响应才是部分响应,这正是要在render属性中定义ID的组件中更新的部分。


  

2 - 当我点击图片

时      

这不起作用。为什么呢?

因为h:graphicImage根本不支持f:setPropertyActionListener。它仅适用于UICommand组件。

您希望将其换成h:commandLink

<h:commandLink>
    <f:setPropertyActionListener target="#{bean.method}" value="some" />
    <f:ajax event="action" render="rendering"/>
    <h:graphicImage value="img/img.png" alt="img"/>
</h:commandLink>

(如果需要,使用CSS生成的<a>元素导致边框/下划线的样式)