相关疑难解决方法(0)

如何仅在发生onclick / oncomplete / on ...事件且不在页面加载时调用JSF支持bean方法

我有两个图像按钮:

<div class="sidebarOptions">
    <input type="image" src="images/homeButton.jpg" onclick="#{home.setRendered(1)}"/>
</div>
<div class="sidebarOptions">
    <input type="image" src="images/memberButton.jpg" onclick="#{home.setRendered(2)}"/>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,当页面加载值1和2时,这两种方法都会立即被调用。同样,当我单击它时,这两种方法也会被调用。

当实际单击图像按钮时,如何才能实现仅调用bean方法的所需功能?

jsf onclick jsf-2

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

如何将方法参数传递给ActionListener?

我正在创建一个动态生成的菜单.在数据库中,我已经存储了String每个子菜单的directory()并存储在ArrayListbean中.这是代码的一部分:

<c:forEach items="#{controlWeb.algorithms}" var="alg">
    <h:form>
        <h:commandLink actionListener="#{controlWeb.setContent(PROBLEM)}"  value="About"/>
    </h:form>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

问题出在"问题"中.我想写#{alg.algorithm1},但它不起作用,因为我认为嵌套EL表达式是不可行的.

actionListener设置String #{alg.algorithm1}在另一个String.我怎样才能达到要求?

el jsf-2

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

使用javascript参数对ajax回调进行Primeface

我正在努力将Primefaces bean属性直接发送到javascript,以便打开一个新页面并将bean属性的内容写入新页面.

我正在使用Primefaces 4.0.

我有一个这样的命令按钮:

 <p:commandButton id="buttonId" update="buttonId, otherComponentId"
    value="press me" process="@this" actionListener="#{homeController.myMethod}"
    oncomplete="handleComplete(xhr, status, args)">
 </p:commandButton>
Run Code Online (Sandbox Code Playgroud)

在handleComplete中,javascript函数args未定义,但不是xhr和status.javascript函数定义:

function handleComplete(xhr, status, args){
    var w = window.open();
    w.document.open();
    alert(xhr.responseText.substring(100));
    alert(status);
    alert(args);
    var d = '<head></head><body>'+ args.firstParam +'<body>';
    w.document.write(d);
    w.document.close();
}
Run Code Online (Sandbox Code Playgroud)

首先警告它给我页面,第二个解析错误,错误是:Uncaught TypeError:无法读取未定义的属性'firstParam'

我想在args中传入一个这样的字符串:

public String MyMethod() {
    RequestContext context = RequestContext.getCurrentInstance();  
    context.addCallbackParam("firstParam", "my string");
      return "";
}
Run Code Online (Sandbox Code Playgroud)

并使用javascript访问它args.firstParam.

该方法被调用,(我有一些工作的打印屏幕.)

我必须尝试这种方式,而不是将文本设置为

<h:outputText id="myText" escape="false" rendered="true"
            value="#{homeController.property}" />
Run Code Online (Sandbox Code Playgroud)

然后得到这个元素的innerHTML,因为我将使用innerHTML获得的内容与bean中的字符串变量不同.这种方法有效但不是我想要的.我想知道为什么args对象是未定义的,或者我怎样才能从javascript中管理bean属性.谢谢.

javascript ajax primefaces

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

如果JSF不支持,为什么我能够将<f:actionListener>绑定到任意方法?

我正在使用Glassfish 3.1.2.2和JSF Mojarra 2.1.6.

我有以下Facelets页面:

<h:form>
  <h:commandLink value="link">
    <f:actionListener binding="#{backingBean.someMethod(1)}"/>
  </h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)

以下支持bean:

@RequestScoped
@ManagedBean
public class BackingBean {
  public void someMethod(int i) {
    System.out.println("It was called: " + i);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我单击链接时,控制台中出现"Info:It called called:1".

binding读取文档:

图书馆:http://xmlns.jcp.org/jsf/core,http://java.sun.com/jsf/core(Jsf Core)

标签:actionListener

捆绑

值绑定表达式,其值为实现javax.faces.event.ActionListener 的对象.[强调我的]

此外,该问题的接受答案表明,f:actionListener调用任意方法是不可能的.

如果不支持,为什么调用backing bean方法?

jsf binding el actionlistener methodexpression

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

ICEFaces动作与actionListener

我不清楚这两种方法之间的区别.我看到actionListener将ActionEvent作为参数,但两者都可以绑定到辅助bean中的方法.

ActionEvent参数唯一的功能区别是什么?所以如果我需要ActionEvent使用监听器方法,如果没有,那么它们都可以工作吗?

java jsf icefaces actionlistener

3
推荐指数
1
解决办法
3159
查看次数

javax.el.MethodNotFoundException:找不到方法:TableBeanDetail@bd4053.onRowSelect()

当我单击每行中出现的数据表中的命令按钮时,我收到以下错误.通过查看示例,我了解到一旦单击了commandbutton,就会首先执行以下代码

 <f:setPropertyActionListener value="#{detailRow}" target="#{tableBeanDetail.selectedEntry}" />  
Run Code Online (Sandbox Code Playgroud)

然后是与以下bean方法关联的代码

  <p:commandButton id="detailsButton" actionListener="#{tableBeanDetail.onRowSelect}" icon="ui-icon-
      search" title="View Details">  
Run Code Online (Sandbox Code Playgroud)

在我的onRowSelect中我试图做以下事情:

  public String onRowSelect(ActionEvent event) throws Exception {


    // Get key fields from row data and set the parameters that needs to be passed w
             .....
 }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

jsf jsp primefaces

3
推荐指数
1
解决办法
6695
查看次数

创建主 - 详细信息表和对话框,如何重用相同的对话框进行创建和编辑

我正在尝试创建一个对话框,用于创建对象和更新对象.因此,如果我碰巧点击"新建"按钮,我将看到一个包含要填充的空字段的对话框,或者如果我单击某个条目的编辑按钮,该条目的数据将显示在对话框中以进行更新.

按照版本5.2的primefaces展示中的示例,我可以以只读的outputText形式呈现数据,但是当我将其更改为inputText时,该字段保持为空.以下代码是我的例子:

<h:form id="form">    
  <p:dataGrid id="guestList" var="guest" value="${guestList.guests}" columns="3" paginator="true" rows="20">
    <f:facet name="header">
      Guest List
    </f:facet>

    <p:panel>
      <h:outputText value="${guest.name}" />
      <br />
      <h:outputText value="${guest.street}" />
      <br />
      <h:outputText rendered="#{guest.street2.length() gt 0}"
        value="${guest.street2}" />
      <h:panelGroup rendered="#{guest.street2.length() gt 0}">
        <br />
      </h:panelGroup>
      <h:outputText value="${guest.city}, " />
      <h:outputText value="${guest.state} " />
      <h:outputText value="${guest.zipCode}" />
      <p:commandButton update="@form:newGuestDetail" oncomplete="PF('newGuestDialog').show()" icon="ui-icon-edit" styleClass="ui-btn-inline">
        <h:outputText styleClass="ui-icon ui-icon-edit" style="margin:0 auto;" />
        <f:setPropertyActionListener value="#{guest}" target="#{guestList.selectedGuest}" />
      </p:commandButton>
    </p:panel>
  </p:dataGrid>

  <p:dialog header="#{guestList.hasSelected() ? 'Edit Guest' : 'New Guest'}" widgetVar="newGuestDialog" modal="true" showEffect="fade" …
Run Code Online (Sandbox Code Playgroud)

jsf dialog master-detail primefaces

3
推荐指数
1
解决办法
1981
查看次数

验证失败后重新评估所需的表达式

我有一个包含一些必填字段的表单,具体取决于 a selectOneMenu,如下所示:

<p:selectOneMenu id="myList" value="#{myBean.selectedItem}">
    <p:selectItems value="#{myBean.myItems}" />
    <p:ajax listener="#{myBean.myList_change}"
            process="myList field1 field2 field3"
            update="field1 field2 field3" />
</p:selectOneMenu>

<p:inputNumber id="field1" required="true" />
<p:inputNumber id="field2" required="#{myBean.selectedItem gt 1}" />
<p:inputNumber id="field3" required="#{myBean.selectedItem gt 2}" />
Run Code Online (Sandbox Code Playgroud)

我第一次按下提交按钮时,没有填写必填字段:

<p:commandButton id="mySubmit" action="#{myBean.myAction}" />
Run Code Online (Sandbox Code Playgroud)

我收到验证错误,然后如果我更改selectOneMenu值,将不再评估所需的表达式。

例如,如果我提交表单时selectedItem equals to 3出现所有验证错误,那么我提交表单时selectedItem equals to 1,primefaces 仍然要求所有三个字段都为必填字段。

我尝试向按钮添加一个 resetInput:

<p:resetInput target=":myForm" />
Run Code Online (Sandbox Code Playgroud)

而不是immediate="true"到了selectOneMenu,没有任何成功。

有什么想法吗?

注意:PrimeFaces 版本为 6.2

PS:在图片中,只需要第一个字段,但应该需要所有元素。

例子

遵循完整的最小可重现示例:

xhtml 文件 (test.xhtml):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE …
Run Code Online (Sandbox Code Playgroud)

primefaces

3
推荐指数
1
解决办法
121
查看次数

多次调用ActionListener(Bug?) - Mojarra 2.1.3

我有以下按钮:

   <h:commandButton 
     disabled="#{mybean.searching}"
     binding="#{mybean.searchButton}"
     actionListener="#{mybean.searchForLicenses}"
     value="Search" />
Run Code Online (Sandbox Code Playgroud)

当我调试时,我看到actionListener首先被调用两次,然后被调用三次,接下来单击四次,依此类推.

似乎每次重新加载时actionListener都会再次注册.

我正在使用Mojarra 2.1.3(也尝试过2.0.6)和Tomcat 7和IceFaces.

绑定是这样完成的:

private javax.faces.component.UICommand searchButton;

public void setSearchButton(UICommand searchButton) {
  this.searchButton = searchButton;
}

public UICommand getSearchButton() {
  return searchButton;
}
Run Code Online (Sandbox Code Playgroud)

jsf icefaces mojarra

2
推荐指数
1
解决办法
5122
查看次数

JSF2:action和actionListener

从这个答案由BalusC这里的行动和ActionListener的差异,Use actionListener if you want have a hook before the real business action get executed, e.g. to log it, and/or to set an additional property (by <f:setPropertyActionListener>,.但是,当我决定编写一些代码来测试它时,结果有点不同.这是我的小代码

<h:form id="form"> 
   <h:panelGroup id="mygroup">
     <p:dataTable id="mytable" value="#{viewBean.foodList}" var="item">
         <p:column>
             #{item}
         </p:column>
         <p:column>
             <p:commandButton value="delete" 
                        action="#{viewBean.delete}"
                        update=":form:mygroup">
                 <f:setPropertyActionListener target="#{viewBean.selectedFood}"
                                              value="#{item}"/>
             </p:commandButton>
         </p:column>
      </p:dataTable>
   </h:panelGroup>
</h:form>
Run Code Online (Sandbox Code Playgroud)

这是我的豆子

@ManagedBean
@ViewScoped
public class ViewBean {
    private List<String> foodList;
    private String selectedFood;

    @PostConstruct
    public void init(){

        foodList = new ArrayList<String>();
        foodList.add("Pizza");
        foodList.add("Pasta");
        foodList.add("Hamburger");
    } …
Run Code Online (Sandbox Code Playgroud)

jsf action actionlistener primefaces jsf-2

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