Servlets JSF替换<;p:按钮>;与<;h:commandLink>;

Servlets JSF替换<;p:按钮>;与<;h:commandLink>;,servlets,jsf-2,primefaces,Servlets,Jsf 2,Primefaces,我有一个工作的,它在托管bean中调用一个方法,如下所示: <h:form id="loginForm"> <p:button value="Facebook Connect" href="#{loginPageCode.facebookUrlAuth}" /> <br /> <h:outputText

我有一个工作的
,它在托管bean中调用一个方法,如下所示:

        <h:form id="loginForm">
                <p:button value="Facebook Connect"
                    href="#{loginPageCode.facebookUrlAuth}" />
                <br />
                <h:outputText value="#{loginPageCode.userFromSession}"/>
        </h:form>


我决定用一个链接来代替它,所以我做了以下工作:

      <h:form id="loginForm">

        <h:commandLink action="#{loginPageCode.getFacebookUrlAuth}"
            value="#{loginPageCode.userFromSession}" />
    </h:form>

但不幸的是,
没有调用该方法,但我不知道为什么


注意:托管bean中的方法将URL返回到servlet,因此当使用返回的URL进行单击时,commandLink必须调用这些servlet。当您在页面上创建一个简单的HTML链接时,使用返回的URL>

。 单击它时,将从浏览器执行HTTP GET。 使用这种语法,您根本不需要任何语法。没有表格提交

在使用和使用标准JSF表单提交时 有了输入,你就可以输入了。 就你而言: 值是yout按钮的标签 execute是bean上的一个java方法

public String execute()
{
  return "nextPage";
}
JSF使用这个mececute方法的返回来导航“内部”JSF, 因此,“nextPage”可以是faces-config.xml中导航规则的别名 或者JSF2使用JSF页面的名称:nextPage.xhtml

在您的例子中#{loginPageCode.getFacebookUrlAuth}将返回如下字符串:


JSF不能用它来导航:它既不是别名也不是页面。

这里有一个很大的误解。
根本不调用托管bean中的操作方法。按下按钮时,不会计算
href
属性中的EL表达式。当呈现按钮的HTML表示形式时,将对其进行计算。如果在
facebookUrlAuth
的getter上放置一个断点,则会看到在显示带有按钮的页面时调用它,而不是在按下按钮时调用它。如果您通过右键单击查看源代码来检查JSF生成的HTML输出,那么您将看到该按钮在onclick中通过JavaScript进行导航。这是一个纯导航按钮,不是提交按钮

生成一个使用JavaScript提交父表单的链接。它不是为执行纯导航而设计的。为此,您应该使用
甚至

如果您理解JSF仅仅是一个HTML代码生成器,并且熟悉基本HTML,那么这一切都会变得更加简单

另见:

参考:将Project Stage设置为development,单击链接后,您可能会发现“找不到匹配的导航案例…”。可用于p:button和h:commandLinks的导航值可能不同。请问,primefaces中有没有一种方法可以在鼠标上方的链接上加下划线,或者我应该使用javascript来实现这一点?我禁用了默认下划线,如下所示,并希望在鼠标上方的链接上加下划线,而不只是使用CSS
:hover
伪选择器。它与在普通HTML
元素上执行时没有什么不同。还要学习基本的HTML/CSS。作为旁注/补充,如果在连接到Facebook之前要执行某些业务操作(如日志记录),OP可以使用
并在操作方法中发送重定向。当然,它可以单独放置。
<h:outputLink value="#{loginPageCode.facebookUrlAuth}">Facebook Connect</h:outputLink>
<a href="#{loginPageCode.facebookUrlAuth}">Facebook Connect</a>