我一直在努力解决这个问题。我想ActionBean
对show
和update
动作使用相同的条纹。但是,我无法弄清楚如何以一种干净的方式来执行此操作,以允许当前用户对对象所有权进行可靠的绑定、验证和验证。
例如,假设我们的动作 bean 需要一个postingId
. 该帖子属于已登录的用户。我们可能有这样的事情:
@UrlBinding("/posting/{postingId}")
@RolesAllowed({ "USER" })
public class PostingActionBean extends BaseActionBean
现在,对于show
动作,我们可以定义:
private int postingId; // assume the parameter in @UrlBinding above was renamed
private Posting posting;
现在用于@After(stages = LifecycleStage.BindingAndValidation)
获取Posting
. 我们的@After
函数可以验证当前登录的用户是否拥有该帖子。我们必须使用@After
, not @Before
,因为postingId
不会事先绑定到参数。
但是,对于update
函数,您希望使用, not将Posting
对象绑定到 Posting 变量,以便将返回的表单条目应用到现有 Posting 对象之上,而不是应用到空存根上。@Before
@After
自定义TypeConverter<T>
在这里可以很好地工作,但是由于无法从TypeConverter
界面获得会话,因此很难在绑定期间验证对象的所有权。
我能看到的唯一解决方案是使用两个单独的操作 bean,一个用于显示,一个用于更新。但是,如果您这样做,则<stripes:form>
标记及其下游标记将无法正确填充表单的值,因为beanclass
oraction
标记必须映射回相同的ActionBean
.
据我所知,Stripes 模型仅在操作简单(无 POJO)参数时才能保持在一起。在任何其他情况下,您似乎遇到了从数据存储中绑定对象并用客户端发送的更新覆盖它的问题 22。
我一定是错过了什么。经验丰富的 Stripes 用户的最佳实践是什么?