首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >commandLink未调用已激活重写RewriteRule的操作

commandLink未调用已激活重写RewriteRule的操作
EN

Stack Overflow用户
提问于 2016-08-18 21:22:41
回答 1查看 167关注 0票数 0

我目前使用的是WildFly 10中JRE 8中的mojarra2.2.13的重写-配置-prettyFaces3.4.0。现在,我想删除漂亮的config.xml文件,切换到基于规则的RewriteConfiguration。一旦我创建了这个程序并将我的漂亮配置url映射映射到规则中,我的应用程序就可以正常工作了。但是,我注意到我的h:commandLink操作再也不会被调用了。当我切换回漂亮-config.xml时,它可以正常工作,切换回..古尔格。您知道为什么这不适用于RewriteConfiguration吗?

我的类路径包含以下重写jars:

  • rewrite-servlet-3.4.0.Final.jar
  • 重写-config-prettyfaces-3.4.0.Final.jar(但这在不工作的设置中被删除)

下面你可以找到一些我的代码片段。

非常感谢!

我的漂亮配置有这样的配置

代码语言:javascript
复制
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces
                      http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config-prettyfaces.xsd">

    <url-mapping id="start">
        <pattern value="/#{lang}"/>
        <view-id value="/dashboard.jsf"/>
    </url-mapping>
    <url-mapping id="download">
        <pattern value="/#{lang}/downloadReport.html"/>
        <view-id value="/downloadReport.jsf"/>
    </url-mapping>
    <url-mapping id="catalog">
        <pattern value="/#{lang}/catalogue/#{catalogName}"/>
        <view-id value="/catalogDashboard.jsf"/>
    </url-mapping>
    <url-mapping id="violations">
        <pattern value="/#{lang}/catalogue/#{catalogName}/violations"/>
        <view-id value="/violations.jsf"/>
    </url-mapping>
    <url-mapping id="distributions">
        <pattern value="/#{lang}/catalogue/#{catalogName}/distributions"/>
        <view-id value="/distributions.jsf"/>
    </url-mapping>

</pretty-config>

我的RewriteConfiguration文件

代码语言:javascript
复制
@RewriteConfiguration
public class ApplicationNavigationConfigurationProvider extends HttpConfigurationProvider {

    @Override
    public Configuration getConfiguration(ServletContext servletContext) {
        return ConfigurationBuilder.begin()
                .addRule(TrailingSlash.remove())
                .addRule(Join.path("/{lang}").to("/dashboard.jsf"))
                .addRule(Join.path("/{lang}/downloadReport.html").to("/downloadReport.jsf"))
                .addRule(Join.path("/{lang}/catalogue/{catalogName}").to("/catalogDashboard.jsf"))
                .addRule(Join.path("/{lang}/catalogue/{catalogName}/violations").to("/violations.jsf"))
                .addRule(Join.path("/{lang}/catalogue/{catalogName}/distributions").to("/distributions.jsf"));
    }

    @Override
    public int priority() {
        return 0;
    }
}

我的简化dummy.xhtml文件如下所示:

注意:与commandLink相关的部分实际上是catalogDashboard.jsf的一部分。请考虑丢失的虚拟重写规则。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

<f:view>   
    <h:body>
        <h:outputText value="#{harvesterBean.currentRepository.name}"/>
        <h:form>
            <h:commandLink action="#{harvesterBean.updateAttachment(1)}" value="Test action invocation">
                <f:param name="catalogName" value="#{request.getParameter('catalogName')}"/>
            </h:commandLink>
        </h:form>
    </h:body>
</f:view>
</html>

使用要通过操作调用的方法来调用bean

代码语言:javascript
复制
@ViewScoped
@Named
public class HarvesterBean implements Serializable  { // updated: implements Serializable 

    @Inject
    private HarvesterClientActionImpl harvesterClientAction;

    @Inject
    private CurrentCatalogBean currentCatalogBean;

    private Repository currentRepository;
    private Harvester currentHarvester;
    private Run currentRun;
    private List<RunLog> logs;
    private String selectedAttachment;

    @PostConstruct
    public void init() {
        currentRepository = harvesterClientAction.retrieveRepository(currentCatalogBean.getCurrentCatalog().getTitle());
        currentHarvester = harvesterClientAction.retrieveHarvester(currentRepository.getSourceHarvester());
        currentRun = harvesterClientAction.retrieveLastRun(currentHarvester.getId());
        logs = harvesterClientAction.retrieveRunLogs(currentHarvester.getId(), currentRun.getId());

    }

    // This method is not invoked when using the RewriteConfiguration instead of pretty-config.xml
    public void updateAttachment(long logId) {
        selectedAttachment = harvesterClientAction.retrieveAttachment(currentHarvester.getId(), currentRun.getId(), logId);
    }
// getter and setter
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 15:55:13

请确保在依赖项中包括重写JSF集成模块:

代码语言:javascript
复制
  <dependency>
     <groupId>org.ocpsoft.rewrite</groupId>
     <artifactId>rewrite-integration-faces</artifactId>
     <version>3.4.0.Final</version>
  </dependency>

自3.4.0.Final以来,rewrite-config-prettyfaces依赖于这个模块。因此,如果您放弃了PrettyFaces集成,您还会松散核心的JSF集成模块,这可能会导致类似的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39027714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档