使用JSF页面中的参数调用bean方法

Raj*_*pta 13 jsf primefaces

是否可以调用bean方法并直接从视图传递参数,而不是首先设置bean属性,然后使用commandButton或类似方法调用不带参数的方法?

我有一个项目列表,每个项目都有一个操作列表.为了减少状态,我使用单个曲面remoteCommand代替几个曲面commandButton.从视图中获取动作触发器时,我会调用remoteCommandfrom javascript,但由于它remoteCommand是一个但用于多个项目因此我需要传递项目的id.我想知道是否有办法将项目的id直接作为参数传递给bean方法,而不是先将其设置为bean属性?有没有办法这样做?

实际上,当页面上有很长的项目列表时,我正在寻找一种更好的方法来处理页面上的多个commandButtons.

建议?谢谢.


使用JSF 2.1.6 Mojarra和Primefaces 3.0RC1

Bal*_*usC 21

自从作为Servlet 3.0的一部分的EL 2.2以来,支持传递方法参数.因此,如果您的webapp在Servlet 3.0兼容容器(Tomcat 7,Glassfish 3等)上运行,并且web.xml声明符合Servlet 3.0规范(这可能是正确的,因为您使用的是JSF 2.1,而这反过来隐含地要求Servlet 3.0),那么您将能够以下面的形式将方法参数传递给bean操作方法:

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

public void submit(Long id) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以像以下一样传递值得满足的对象:

<h:commandButton value="Submit" action="#{bean.submit(item)}" />
Run Code Online (Sandbox Code Playgroud)

public void submit(Item item) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您的目标是Servlet 2.5容器,那么您可以通过用例如支持相同构造的JBoss EL替换EL实现来实现相同的目的.另请参阅在EL中使用参数/变量/参数调用直接方法或方法.


Lio*_*ion 8

您可以使用这样的参数调用ManagedBean方法.

<h:commandButton actionListener="#{stateBean.delete(row.stateID)}" 
 value="Delete" id="btnDeleteS">

   <f:ajax event="action" execute="@form" render="@form"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

相应的ManagedBean就是这样的.

@ManagedBean
@RequestScoped
public class StateBean
{
    @EJB
    private RemoteInterface obj=null;

    public void delete(String stateID)
    {
        //Code stuff here.
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用<f:setPropertyActionListener></f:setPropertyActionListener>这样直接设置ManagedBean属性的值.

<h:commandButton value="Delete" id="btnDeleteS">

     <f:setPropertyActionListener target="#{stateBean.someProperty}"
       value="#{someValue}"/>
     <f:ajax event="action" execute="@form" render="@form"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

  • +1 thee propertyActionListener对我来说是最好的方式 (2认同)