标签: tapestry

我如何使用Tapestry-Security?

我最近发现了Tapestry 5,它在视图和控制器之间的明确分离,使用名称标准化而不是XML让我直截了当.坦率地说,我不打算改变,但文档对我来说还不够.

我正在开发的项目必须能够支持多种类型的角色.我必须允许用户认证,根据他们的角色使用某些服务以及他们的角色对URL的访问.

经过一些研究,我遇到了Tapestry-Security,这是Tynamo项目的一部分.

我希望我的服务层完全独立于我的Web应用程序,因为我将使用它来实现Web服务和其他一些东西.到时候我不想做另一个身份识别系统.

我的问题是我没有看到如何在不使用Tapestry的情况下使用Tapestry-Security.他们在Tapestry-Security指南中展示的例子对我来说还不够.我有一个非常粗略的想法,它是如何工作的.但是我不知道如何在Tapestry 5之外使用它.

如何在没有Tapestry 5的情况下使用Tapestry-Security?

我也不了解Tapestry项目中AppModule类中使用的过滤系统.是否有文件说明AppModule与过滤系统的工作方式?

是否有人可以向我解释这些事情或指出我正确的方向?

谢谢.

tapestry java-ee tynamo

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

我应该选择Apache Click还是Tapestry 5?

我将决定是使用Apache Click还是Apache Tapestry 5框架.我应该选择哪一个?我正在寻找一个可以用来构建未来几年Java EE Web应用程序的框架.接下来的几天我将测试他们运行样本和自定义项目,但我想提前知道其中一个是不稳定还是大到足以支持大规模企业应用程序.我需要它与Maven,各种AJAX和Eclipse一起工作没有任何困难.

提前谢谢,StackOverflow社区:)

tapestry java-ee click-framework

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

Tapestry:下拉组件的默认值

我将以下代码用于select-component:

Java的类:

@Component(parameters = {"blankOption=AUTO", "model=someModel", "value=someId",
                         "zone=someZone"})
private Select demoSelect;
Run Code Online (Sandbox Code Playgroud)

模板:

<select t:id="demoSelect" />
Run Code Online (Sandbox Code Playgroud)

这将呈现如下所示:

<select id="demoSelect" name="demoSelect">
    <option value=""></option>
    <option value="1">first</option>
    <option value="2">second</option>
    <option value="3">third</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我正在寻找的行为是,预先选择某个选项(这应该在页面类中决定).如何在Tapestry中配置它?基本上我需要告诉Tapestry为适当的选项呈现"选中",例如:

<select id="demoSelect" name="demoSelect">
    <option value=""></option>
    <option value="1">first</option>
    <option value="2" selected="selected">second</option>
    <option value="3">third</option>
</select>
Run Code Online (Sandbox Code Playgroud)

是否足以改变模型(我不这么认为),或者我是否必须扩展Select-component本身.我发现这篇文章看起来非常有前途,但遗憾的是所有源代码的链接都已经死了.

select tapestry drop-down-menu

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

将API公开给Tapestry Web应用程序

我正在开发一个基于Tapestry 5的Web应用程序,它应该向iPhone和Android设备公开API.目前,API是使用tapestry的内置MVC功能实现的.例如,所有服务都是处理程序方法,它们在专用于移动访问的Tapestry页面类中返回JSON字符串.使用Spring Security进行身份验证,并且每个用户都绑定到会话.我对这些东西比较新,所以如果我错了,请纠正我,但这似乎不是一个非常干净的解决方案.

这个解决方案有哪些可能的缺点?使用REST-API时有什么显着优势?在这种情况下最佳做法是什么?

java api mobile tapestry

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

Shiro授权使用远程角色填充授权

我正在使用使用Apache Shiro的Tapestry-Security

我有一个处理授权和身份验证的自定义域.我们的身份验证在技术上使用远程服务进行,该服务返回用户名和一组角色.我只是将用户名传递给我的自定义AuthenticationToken,它允许我查询我们的本地数据库并设置SimpleAuthenticationInfo.

我无法弄清楚如何使用从我们的远程服务返回给我的角色列表来填充AuthorizationInfo doGetAuthorizationInfo方法.下面是我用来填充领域的代码.

Login.class

//Remote authentication service
RemoteLoginClient client = new RemoteLoginClient();
RemoteSubject authenticate = client.authenticate(username, password);

//tapestry security authentication
Subject currentUser = SecurityUtils.getSubject();
CustomAuthenticationToken token = new 
    CustomAuthenticationToken(authenticate.getUsername());
System.out.println("roles" + authenticate.getRoles());

currentUser.login(token);
Run Code Online (Sandbox Code Playgroud)

customRealm公共类中的AuthorizationInfo方法CustomRealm扩展AuthorizingRealm {

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    CustomAuthenticationToken upToken = (CustomAuthenticationToken ) token;
    String email = upToken.getUsername();

    ApplicationUser applicationUser = (ApplicationUser) session.createCriteria(ApplicationUser.class)
            .add(Restrictions.like("email", email + "%"))
            .uniqueResult();

    if (applicationUser == null) {
        throw new UnknownAccountException("User doesn't exist in EPRS database");
    }

    return buildAuthenticationInfo(applicationUser.getId()); …
Run Code Online (Sandbox Code Playgroud)

java tapestry shiro

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

如何在Tapestry5中使用自定义的hibernate.cfg.xml文件路径

如何hibernate.cfg.xml在tapestry应用程序中更改hibernate配置文件的名称或路径?

hibernate tapestry

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

挂毯网格默认排序

我想指定一个挂毯网格的默认排序列.

我知道我可以在服务器端对我的getter中的记录进行排序,但这似乎是不必要的努力,因为网格完全能够对它自己进行排序.

所以我的网格定义如下:

<t:grid source="queues" inPlace="true"> </t:grid>
Run Code Online (Sandbox Code Playgroud)

getQueues返回对象集合,如:

public class Queue {
    public String getName();
    public float getOccupancy();
}
Run Code Online (Sandbox Code Playgroud)

我希望默认情况下按照"占用"属性以后代顺序对网格进行排序.

从我看到的Tapestry文档中,Grid具有属性sortModel,它似乎是正确的选项.但是我找不到很好的解释,将它设置为正确的值.

sorting grid tapestry

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

Tapestry 4:资产缓存控制?

我使用Tapestry 4,每当我们推出一个更改任何资产(图像,样式表,JS库)的版本时,我们就会遇到问题,因为用户的浏览器缓存中仍然有旧版本的资产.我想设置一些简单的方法来允许缓存,但在更新应用程序时强制下载新的资产.简单地完全不允许缓存资产是不可接受的解决方案.

我没有看到任何现有的机制,但我想到可能有一些方法告诉Tapestry将内部版本号添加到URL,如下所示:

http://www.test.com/path/to/the/asset/asset.jpg?12345

这样,每个新构建都会使它看起来像最终用户的不同资产.

Tapestry是否提供了一种解决我不知道的缓存问题的简单方法?如果没有,如何修改Tapestry生成的URL?负责这样做的代码如何获得内部版本号?(例如,我可以将构建号编入Spring bean,但是新的URL构建机制将如何获得它?)

browser caching tapestry

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

删除通用 Tapestry JavaScript 和 CSS

我使用 Maven 创建了一个新的 Tapestry 5.3 项目。我注意到 Tapestry 向所有页面添加了大量不同的 JS 和 CSS 文件:

<link type="text/css" rel="stylesheet" href="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/default.css"/>
<link type="text/css" rel="stylesheet" href="/tutorial1/assets/1.0-SNAPSHOT-DEV/ctx/layout/layout.css"/>
<link type="text/css" rel="stylesheet" href="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/tapestry-console.css"/>
<link type="text/css" rel="stylesheet" href="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/t5-alerts.css"/>
<link type="text/css" rel="stylesheet" href="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/tree.css"/>
<script src="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/underscore_1_3_3.js" type="text/javascript"></script>
<script src="/tutorial1/assets/1.0-SNAPSHOT-DEV/tapestry/scriptaculous_1_9_0/prototype.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

还有很多很多……

这些是我的网站正常工作所必需的吗?如果没有,我该如何删除它们?我自己编写 JS 很舒服,我不需要 Tapestry 为我添加任何东西。

javascript tapestry

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

java.lang.ClassFormatError:类中的非法字段修饰符

我正在尝试使用环境服务实现一个简单的TabGroup .我的代码看起来像这样:

public class TabPanel
{
  ...
  @Inject
  private Environment environment;
  ...
  void beginRender()
  {
      environment.push(TabContext.class, new TabContext()
      {

          public boolean isActiveTab(String tabId)
          {
             return active != null && active.equals(tabId);
          }

      });
   }

}


public interface TabContext
{
   boolean isActiveTab(String tabId);
}


public class Tab
{
   ...
   @Environmental
   private TabContext tabContext;

   @Inject
   private ComponentResources resources;
   ...

   private boolean isActiveAndEnabled()
   {
      return tabContext.isActiveTab(resources.getId()) && !disabled;
   }

}
Run Code Online (Sandbox Code Playgroud)

执行此代码时,它会抛出以下异常:

java.lang.ClassFormatError: Illegal field modifiers in class TabContext
Run Code Online (Sandbox Code Playgroud)

我在旧线程中找到了部分答案:"......这样的接口不应该在组件包中开始."

我的问题是:我应该在哪里移动TabContext界面?

遵循规则#1我发布整个堆栈跟踪:

java.lang.ClassFormatError: …
Run Code Online (Sandbox Code Playgroud)

java tapestry

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