相关疑难解决方法(0)

action和actionListener之间的差异

是什么区别actionactionListener,什么时候应该使用actionactionListener

jsf action actionlistener jsf-2

385
推荐指数
3
解决办法
25万
查看次数

什么可以使用<f:metadata>,<f:viewParam>和<f:viewAction>?

任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 viewparams viewaction

146
推荐指数
1
解决办法
12万
查看次数

如何将选定的行传递给dataTable中的commandLink或ui:repeat?

我在JSF 2应用程序中使用Primefaces.我有一个<p:dataTable>,而不是选择行,我希望用户能够直接对各行执行各种操作.为此,我<p:commandLink>在最后一栏中有几个.

我的问题:如何将行ID传递给命令链接启动的操作,以便我知道要对哪一行进行操作?我尝试使用<f:attribute>:

<p:dataTable value="#{bean.items}" var="item">
    ...
    <p:column>
        <p:commandLink actionListener="#{bean.insert}" value="insert">
            <f:attribute name="id" value="#{item.id}" />
        </p:commandLink>
    </p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

但它总是产生0 - 显然在f呈现属性时行变量不可用(当我使用固定值时它可以工作).

有人有替代解决方案吗?

datatable jsf parameter-passing commandlink jsf-2

97
推荐指数
3
解决办法
17万
查看次数

如何在JSF中导航?如何使URL反映当前页面(而不是前一页)

我正在学习JSF,当我意识到每当我们使用时<h:form>,JSF的标准行为总是向我显示浏览器中上一页的URL ,而不是当前页面的URL,我感到非常惊讶和困惑.

我知道这与JSF总是将表单发布到同一页面的方式有关,然后只是呈现控制器将其返回给浏览器的任何页面,而浏览器不知道页面位置已更改.

似乎JSF已经存在了足够长的时间,必须有一个干净,可靠的方法来处理这个问题.如果是这样,你介意分享吗?

我找到了各种解决方法,但遗憾的是,这似乎不是一个真正可靠的解决方案.

  • 只需接受该网址具有误导性.
  • 附加"?faces-redirect=true"每个 bean的操作的返回值然后
    • 弄清楚如何@RequestScoped用其他东西替换(Flash Scopes,CDI对话,@ SessionScoped,......).
    • 接受为每个用户操作进行两次HTTP往返.
  • 使用某种方法(例如第三方库或自定义代码)隐藏URL中的页面名称,始终对每个页面使用相同的通用URL.

如果它"?faces-redirect=true"是如此好,有没有办法配置整个应用程序以这种方式处理所有请求?

navigation url jsf redirect

51
推荐指数
1
解决办法
4万
查看次数

提交后清除JSF表单输入值

如果有表单,并且有文本框和按钮,那么在提交表单后如何删除文本框的内容?

<h:inputText id="name" value="#{bean.name}" />          
<h:commandButton id="submit" value="Add Name" action="#{bean.submit}" />
Run Code Online (Sandbox Code Playgroud)

在文本框中输入值并提交后,该值仍显示在文本框中.我需要在提交后清除文本框的内容.我怎样才能做到这一点?

forms jsf clear

11
推荐指数
3
解决办法
5万
查看次数

验证错误后jsf viewparam丢失

我面临以下问题:在一个页面中,我列出了我的应用程序的所有用户,并为每个用户都有一个"编辑"按钮,这是一个"GET"链接?id=<userid>.

编辑页面具有<f:viewParam name="id" value="#{editUserBean.id}"/>元数据.
如果我输入了一些输入错误并提交(我使用CDI Weld Bean验证),页面会再次显示,但我丢失?id=...了URL,因此丢失了我正在编辑的用户的用户ID.

我看过JSF验证错误中描述的类似问题,丢失了值,但是带有inputhidden的解决方案(或更糟糕的是,使用tomahawk,看起来有点过分)需要大量的uggly代码.

我尝试用CDI添加一个"对话",它正在工作,但它看起来对我来说太过分了.

在验证错误的情况下,JSF中是否存在一个简单的解决方案来保留视图参数?

[我的环境:Tomcat7 + MyFaces 2.1.0 + Hibernate Validator 4.2.0 + CDI(Weld)1.1.2]

jsf cdi jsf-2 jboss-weld

8
推荐指数
1
解决办法
4248
查看次数

<commandlink action = ...>中"?faces-redirect = true"的语义,以及为什么不在任何地方使用它

我想了解在JSF2.0中附加标记"?faces-redirect=true"的action属性背后的语义是什么<h:commandlink>.无论是使用它还是使用它,应用程序确实导航到操作中指定的目标页面.所以乍一看,似乎唯一的效果就是整容,即向用户提供反馈(如果他正在查看浏览器的访问过的URL),他已经移动到新页面.但如果它是如此无害且无副作用,我无法理解为什么它不是默认行为.我怀疑它与JSF2.0的基于post的机制有关.我通过对网址人们看到他的浏览器(当一个JSF应用程序在浏览时已经注意到?faces-redirect=true不使用)是'前’,'页面的次数.’

元NB.我在防火墙后面并且受到"SO需要来自另一个域的外部JavaScript"问题的困扰,所以我为没有格式化而道歉.当我可以从其他域访问时,我还会在几个小时内提供有关您的答案的反馈.

navigation jsf post redirect

8
推荐指数
1
解决办法
1万
查看次数

在回发中保留原始GET请求参数

我只是页面与关联的@RequestScoped支持bean.我从其他页面到达此页面,我在其中传递参数"project".所以,当我进入正确的页面时,我会像contextRoot/faces/jsf.xhtml?project=123.

视图:

<f:metadata>
    <f:viewParam name="project" value="#{entityBean.projectId}" />
</f:metadata>       
...
<p:commandButton value="#{msg['button.add']}"
    actionListener="#{entityBean.addNewEntity((entityName),(entityDescritpion))}"
    ajax="true" update=":projectDetailForm"/>
Run Code Online (Sandbox Code Playgroud)

支持豆:

@Named("entityBean")
@RequestScoped
public class EntityBean implements Serializable{
    private String projectId;

    @PostConstruct
    public void init() {
        params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        for (Map.Entry<String, String> entry : params.entrySet()) {
            System.out.println(entry.getKey() + " / " + entry.getValue());
        }

        if (params.get("project") != null) {
            projectId = params.get("project");
        } else {
            HttpServletRequest request =
                (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
            String projectId = request.getParameter("project");
        }
    }

    //projectId getter and setter
    //public void addNewEntity(String …
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2

5
推荐指数
1
解决办法
3746
查看次数

为什么getQueryString()在使用h:commandButton的jsf支持bean中不起作用

我已经构建了一个位于菜单栏顶部的登录代码片段.如果用户在任何页面中通过导航并突然按下登录按钮,我会希望看到该人员经过身份验证并同时停留在他最初来自的页面上.所以我在支持bean上使用了这个:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
Run Code Online (Sandbox Code Playgroud)

然后如果有说mypage.htm?a = 2&b = 2使用request.getQueryString()得到a = 2&b = 2

但getQueryString返回null,我怎样才能完全从支持bean获得原始URL?

jsf jsf-2

4
推荐指数
1
解决办法
2523
查看次数