0

我在处理查询字符串变量时遇到问题。我有一个变量编辑,我附加在查询字符串中。默认情况下为 true,这意味着我的页面将处于编辑模式,如果为 false,则页面将处于查看模式。因此,在页面中,我读取了编辑查询字符串变量的值并将其分配给了我的支持 bean:

@Named
@RequestScoped
public class UserAction { 
    private boolean edit;
    //setter, getter
}

<ui:define name="metadata">
    <f:metadata>
        <f:viewParam name="edit" value="#{userAction.edit}" />
    </f:metadata>
</ui:define>

在第一次加载页面时效果很好。例如edit=true,我的页面渲染了所有的输入组件,但是当我点击清除按钮时:

<p:commandButton value="Reset" process="@this" update="@form" action="#{userAction.clear()}">
    <f:actionListener
        type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
    <f:param name="edit" value="true"></f:param>
</p:commandButton>

表单在没有输入组件的情况下重新呈现,因为 edit 参数现在为 false。

我试过用 ViewScoped 替换 RequestScoped,但似乎 f:viewParam 出于某种原因无法正常工作。

我还尝试了 setPropertyActionListener,调用了编辑 setter,但是当调用 getter 时,值恢复为 false。

我知道这是一个范围问题,因为我没有遇到几乎相同的代码但使用 ConversationScoped 的相同错误。但我只需要这个支持 bean 是 RequestScope。

任何想法?

4

0 回答 0