Ami*_*ira 1 jsf new-window primefaces managed-bean
我想实现用户输入URL的情况,如果我的托管bean中指定的条件为真,则此URL将在新的网页中打开.
我发现了这种可能性:
"h:link"标签对于生成需要与
JSF"结果" 进行交互的链接很有用,但缺乏"动作"支持使得难以生成动态结果."h:commandLink"标签很糟糕,生成
JavaScript的确非常可怕!除非您有充分的理由支持,否则不建议使用此标记.但它支持"动作"属性,这就是"h:link"所缺乏的."h:outputLink"对于生成不需要与
JSF程序本身交互的链接很有用.最后,如果将"action"属性添加到"h:link"中,它将是完美的.
但在条件验证后,我找不到从托管bean启动打开网页的方法.
我正在使用JSF2.0,Facelets和PrimeFaces 3.4.
要使用其中一个链接组件在新窗口中打开目标,您需要指定target="_blank"属性,但是在您单击链接时这将在新窗口中打开目标,因此不依赖于响应.您基本上需要在响应到达时在新窗口中打开目标.唯一的方法是返回一个JavaScript window.open()调用响应,以便它在webbrowser中执行.
在标准的JSF中,您可以window.open()有条件地呈现JavaScript .
<h:form>
<h:inputText value="#{bean.url}" />
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<h:outputScript rendered="#{bean.valid}">window.open('#{bean.url}')</h:outputScript>
</h:form>
Run Code Online (Sandbox Code Playgroud)
同
private String url;
private boolean valid;
public void submit() {
valid = validate(url);
}
// ...
Run Code Online (Sandbox Code Playgroud)
在PrimeFaces中,您可以使用RequestContext#execute()指定需要在完成响应时执行的JavaScript代码.
<h:form>
<p:inputText value="#{bean.url}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
同
private String url;
public void submit() {
if (validate(url)) {
RequestContext.getCurrentInstance().execute("window.open('" + url + "')");
}
}
// ...
Run Code Online (Sandbox Code Playgroud)
与具体问题无关:你在那里引用的ranty语句似乎是由对HTTP/HTML基础知识一无所知的人写的(GET与POST的限制等等).请带上一粒盐.
| 归档时间: |
|
| 查看次数: |
8608 次 |
| 最近记录: |