Jsf a href/h:链接结果/h:在页面加载期间自动调用的按钮结果方法,无需任何单击

Jsf a href/h:链接结果/h:在页面加载期间自动调用的按钮结果方法,无需任何单击,jsf,hyperlink,methodexpression,Jsf,Hyperlink,Methodexpression,我用h:link或一个标记实现了3个带有3个链接的页面。但在这两种情况下,每当我导航到页面时,都会调用连接到这些链接的方法 下面是标记实现: <a href="#{bean.gotoMySrchie()}"> <h:graphicImage library="images" name='vo2/FavPlus.png' /> </a> <a href="#{bean.gotoMySearches()}">

我用
h:link
或一个
标记实现了3个带有3个链接的页面。但在这两种情况下,每当我导航到页面时,都会调用连接到这些链接的方法

下面是
标记实现:

<a href="#{bean.gotoMySrchie()}">           
    <h:graphicImage library="images" name='vo2/FavPlus.png' />
</a>

<a href="#{bean.gotoMySearches()}">         
    <h:graphicImage library="images" name='vo2/SearchesPlus.png' />
</a>

<a href="#{bean.gotoMyBids()}">         
    <h:graphicImage library="images" name='vo2/BidsPlus.png' />
</a> 
问题是,这些操作方法中的每一个都在调用我的数据库,这完全是浪费调用时间。那么,在JSF2中是否有一种方法可以在页面之间导航,同时使用动作方法来实际执行某些操作,但在我不需要调用这些方法时,却不调用它们

<a href="#{bean.gotoMySrchie()}">           
但是,这会触发POST请求,而不是GET请求,因此可能会产生许多其他后果

默认情况下,单击普通链接会发送GET请求,而不是POST请求。如果您想继续使用GET,那么您应该在与目标页面相关联的支持bean的
@PostConstruct
方法中执行数据库作业,而不是像在加载包含这些链接的页面时那样执行

<h:link ... outcome="/searches">
    <h:graphicImage ... />
</h:link>
另见:

谢谢@BalusC,使用commandLinks确实可以防止页面加载调用。从我的角度看,我不明白为什么帖子会伤害我。有什么特定于JSF的吗?(在这种情况下,我不想使用PostConstract注释,也不想使用preRenderView调用。在这种情况下,它会使代码变得复杂。)单击“good thing”链接。导航链接是幂等的。强迫他们发帖显然是错误的。
<h:link ... outcome="#{bean.gotoMySearches()}">
<h:form>
    <h:commandLink ... action="#{bean.gotoMySearches()}" />
</h:form>
<h:link ... outcome="/searches">
    <h:graphicImage ... />
</h:link>
@Named
@RequestScoped // Or @ViewScoped
public class SearchesBean {

    @PostConstruct
    public void init() {
        // Here.
    }

    // ...
}