【问题标题】:further continuing of double press进一步继续双压
【发布时间】:2012-06-07 19:26:35
【问题描述】:

在之前的questionBalusC 中给了我很好的建议,告诉我一个按钮如何代替commandButton 对非ajax 导航有用。特别是它会更新 http: 位置中的目标地址,这对于用户为页面添加书签很有用。

在遇到问题之前,我一直试图利用这些信息来发挥自己的优势。在一个按钮中,我尝试使用 result="#{backing.something}" 来发现它给了我一个空结果。这看起来像是一个时间问题,因为仅在按下按钮时才评估 action="#{}" 而结果显然需要一个固定字符串,该字符串在页面加载时得到检查。

所以我用 ajax="false" 回到了 commandButton。这有一个问题,我的导航地址是我来自的页面,而不是我要导航的页面。这是用户的错误书签。

感谢在我的学习练习中在 stackoverflow 中获得的所有帮助。 宜兰

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    <h/p:button outcome> 并非旨在调用 bean 操作方法,而是直接包含结果字符串。那里的任何 EL 都会立即作为值表达式进行评估。所以当你打开包含<h/p:button>的页面时,它背后的方法会立即被调用。

    在您的特定情况下,基本上有两种方法可以在导航上调用 bean 操作方法。如果您需要在导航发生之前调用它,并且不打算在每次最终用户重新打开/重新加载 GET 请求时重新调用该操作,然后将其设为 POST-Redirect-GET要求。这是在查询字符串语法中将faces-redirect=true 添加到结果值的问题。

    例如

    <p:commandButton action="#{bean.submit}" ... />
    

    public String submit() {
        // ...
    
        return "nextpage?faces-redirect=true";
    }
    

    这样浏览器会在 POST 之后重定向到目标页面,因此最终用户会看到目标 URL 反映在地址栏中。

    或者,如果您需要在最终用户每次重新打开/重新加载 GET 请求时调用该操作,请改为在请求/视图范围内的支持 bean 的 (post) 构造函数或 preRenderView 侦听器方法中执行该操作。

    例如

    <p:button outcome="nextpage" ... />
    

    @ManagedBean
    @RequestScoped
    public class NextpageBacking {
    
        public NextpageBacking() {
            // In constructor.
        }
    
        @PostConstruct
        public void onPostConstruct() {
            // Or in postconstructor (will be invoked after construction AND injection).
        }
    
        public void onPreRenderView() {
            // Or before rendering the view (will be invoked after all view params are set).
        }
    
        // ...
    }
    

    预渲染视图监听方法需要在nextpage中定义如下

    <f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" />
    

    另见:

    【讨论】:

    • 谢谢。我使用了faces-redirect = true。现在我在 glassfish 中收到一条烦人的消息:WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /ww1, because request parameters have been read, or ServletRequest.getReader() has been called 这似乎是合理的faces-redirect 可能会产生这种影响。我环顾四周,似乎在 web.xml 中我可以放置类似 的内容。但是,由于 Netbeans 生成的 web.xml,我的案例格式并不准确。所以目前,我有消息
    • Netbeans web.xml 说:java.sun.com/xml/ns/javaee" xmlns: xsi="w3.org/2001/XMLSchema-instance" xsi:schemaLocation="java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 所以默认字符集已经是UTF-8了。怎么回事???
    • 谢谢。我的错误是我查看的是 web.xml 而不是 glassfish-web.xml。我使用 Netbeans 生成它,然后对其进行修改。现在一切都很好。
    • 由于求助的目的是为了学习一些东西,我没有机会尝试你的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多