有没有一种方法可以使用h:outputLink,其他JSF标签或代码来创建html链接,以创建带有请求参数的非面孔请求(HTTP GET)?
例如,我有以下导航规则
<navigation-rule>
<navigation-case>
<from-outcome>showMessage</from-outcome>
<to-view-id>/showMessage.jsf</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
在我的页面中,我想输出以下html代码:
<a href="/showMessage.jsf?msg=23">click to see the message</a>
我可以在页面中编写html代码,但是我想使用导航规则,以便将所有url定义在一个可配置文件中。
这是一个有趣的想法。我很想知道它在实践中如何成功。
获取导航规则
导航由NavigationHandler处理。掌握NavigationHandler并不困难,但是API不会公开其使用的规则。
如我所见,您可以:
现在,您还有另一个问题。您将在哪里保留映射以查找视图?将它们硬编码在bean中?
使用导航规则
临时而言,我想到了两种从后端构造包含参数的URL的方法。两者都涉及定义某种bean。
<managed-bean>
<managed-bean-name>navBean</managed-bean-name>
<managed-bean-class>foo.NavBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
资源:
package foo;
import java.io.IOException;
import java.io.Serializable;
import java.net.URLEncoder;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
public class NavBean implements Serializable {
private String getView() {
String viewId = "/showMessage.faces"; // or look this up somewhere
return viewId;
}
/**
* Regular link to page
*/
public String getUrlLink() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String viewId = getView();
String navUrl = context.getExternalContext().encodeActionURL(
extContext.getRequestContextPath() + viewId);
return navUrl;
}
/**
* Just some value
*/
public String getValue() {
return "" + System.currentTimeMillis();
}
/**
* Invoked by action
*/
public String invokeRedirect() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String viewId = getView();
try {
String charEncoding = extContext.getRequestCharacterEncoding();
String name = URLEncoder.encode("foo", charEncoding);
String value = URLEncoder.encode(getValue(), charEncoding);
viewId = extContext.getRequestContextPath() + viewId + '?' + name
+ "=" + value;
String urlLink = context.getExternalContext().encodeActionURL(
viewId);
extContext.redirect(urlLink);
} catch (IOException e) {
extContext.log(getClass().getName() + ".invokeRedirect", e);
}
return null;
}
}
得到
对于GET请求,可以使用UIParameters设置值,并让渲染器构建参数列表。
<h:outputLink value="#{navBean.urlLink}">
<f:param name="foo" value="#{navBean.value}" />
<h:outputText value="get" />
</h:outputLink>
开机自检
如果要在POST操作期间将URL设置为视图,则可以使用操作中的重定向(由按钮或commandLink调用)来实现。
<h:commandLink id="myCommandLink" action="#{navBean.invokeRedirect}">
<h:outputText value="post" />
</h:commandLink>
笔记
请注意,ExternalContext.encodeActionURL用于编码字符串。这是生成可跨上下文(portlet等)移植的代码的良好实践。如果您要编码指向图像或下载文件的链接,则应使用
encodeResourceURL 。
在后端,我有带有POST方法的REST控制器: 如何使用带有请求参数的WebClient创建请求?
问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。
我必须使用导航规则编写一个JSF应用程序。我有几个ManagedBean,它们大多是RequestScoped的。当用户单击commandLink或commandButton时,我希望传递一个参数(例如当前Bean的id),以便Bean可以使用传递的id来填充其modell的数据,从而在使用的数据库中查找数据。为此,我使用了以下解决方案: 这样可以工作,并且在URL中可以看到view-param,
问题内容: 我是新手,所以我的代码可能会出现很多错误,但是我要实现的目标是将GET请求发送到带有 参数的服务器。鉴于我的函数有两个参数,我试图做到更多。我不确定如何将两者结合到实际的URLRequest中?到目前为止,这是我尝试过的 问题答案: 建立请求时,请求的主体没有,但是所有内容都放在URL上。要构建网址(并正确地将其转义), 您还可以使用. 唯一的窍门是,大多数Web服务都需要+转义字符百
当我尝试使用以下URL调用endpoint时: 将引发此异常: 只使用ZonedDateTime对象解析给定的日期是可行的(在Ideone.com上),但是其他的可能是错误的。我在SO上发现了这个问题:使用Spring@RestController处理带有ZonedDateTime参数的HTTP GET 明显的区别是在RequestParam中添加了。现在我在想;我如何让它与QueryDSLPre
我有一个现有的Lambda函数。 我可以使用控制台创建一个以Lambda为目标的新规则。 当我通过控制台这样做时,它会自动创建一个“EventBridge(CloudWatch Events)”触发器,该触发器在Lambda配置屏幕上可见。 规则执行并成功调用Lambda。 尝试使用C#和SDK(nuget包:AWSSDK. EventBridge)自动执行上述步骤,我采取以下步骤: 我成功调用P