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,那么这一切都会变得更加简单
另见:
:hover
伪选择器。它与在普通HTML
元素上执行时没有什么不同。还要学习基本的HTML/CSS。作为旁注/补充,如果在连接到Facebook之前要执行某些业务操作(如日志记录),OP可以使用
并在操作方法中发送重定向。当然,它可以单独放置。
<h:outputLink value="#{loginPageCode.facebookUrlAuth}">Facebook Connect</h:outputLink>
<a href="#{loginPageCode.facebookUrlAuth}">Facebook Connect</a>