如何以下Java条件转化为s:if test="..."在Struts2的?
if(company.getAffiliateId().asInt() != com.foo.bar.Affiliates.XYZ.asInt()){
// do something
}
Run Code Online (Sandbox Code Playgroud)
company.getAffiliateId()返回BigDecimal
com.foo.bar.Affiliates是一个enum
这不起作用:
<s:if test="%{company.affiliateId.asInt() != com.foo.bar.Affiliates.XYZ.asInt() }">
alert("do something");
</s:if>
Run Code Online (Sandbox Code Playgroud) 我的每个活动都需要一个对应的单例View实现.将它们注入活动的最佳策略是什么?
构造函数注入 Activity构造函数是从ActivityMapper的getActivity()调用的.ctor已经有一个参数(一个Place对象).我必须创建ActivityMapper,注入所有可能的视图.不好...
方法注入 - "在执行构造函数后自动执行注释的函数." (GWT in Action,2nd Ed.)好吧,"在执行ctor之后"显然不够快,因为当start()调用Activity的方法时,视图(或以这种方式注入的RPC服务)仍未初始化,我得到了一个NPE.
在Activity的ctor中用GWT.create构造注入器.没用,因为他们不再是单身人士.
我将此参数发送到我的struts动作
cdata [1] = bar
在我的操作中,我对索引和值感兴趣。我CDATA为OGNL文档所建议的定义了一个getter / setter对:
public void setCdata(int index, String value){
LOG.info("setData; key="+ key +"; value="+ value);
// store index and value;
}
public String getCdata(int index){
return null; // don't really need a setter
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的异常:
2013-04-29 15:38:49,792 [http-apr-8080-exec-3] WARN com.opensymphony.xwork2.util.logging.commons.CommonsLogger.warn(CommonsLogger.java:60) - Error setting expression 'cdata[1]' with value '[Ljava.
lang.String;@4223d2a4'
ognl.OgnlException: target is null for setProperty(null, "1", [Ljava.lang.String;@4223d2a4)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2309)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301) …Run Code Online (Sandbox Code Playgroud) 我需要从数据库中选择具有活动地址的公司(address.address_status_id = 1).如果地址处于非活动状态,则地址列应包含空值.
以下查询完全符合我的要求:
select c.id, c.name, a.id, a.street
from company c
left join
(select * from address where address_status_id = 1) a
on c.id = a.company_id
Run Code Online (Sandbox Code Playgroud)
我在Java/QueryDSL中试过这个:
JPAQuery query = new JPAQuery(entityManager);
query = query.from(qCompany);
query = query.leftJoin(company.addresses, new JPASubQuery().from(qAddress)
.where(qAddress.addressStatusId.eq(AddressStatuss.ACTIVE.asBigDecimal())).list(qAddress));
Run Code Online (Sandbox Code Playgroud)
但是,JPA(以及因此QueryDSL中的JPAQuery)不支持JOIN子句中的子查询
有没有办法重新编写SQL语句,以便它可以用JPA/QueryDSL表示?
编辑:如果它有所作为,我们正在使用Oracle DB和Hibernate JPA提供程序.
我想解析包含月份(1-12)和年份的日期,例如:
1.2015
12.2015
Run Code Online (Sandbox Code Playgroud)
成 LocalDate
我使用此代码获得异常:
final DateTimeFormatter monthYearFormatter = DateTimeFormatter.ofPattern("M.yyyy");
LocalDate monthYearDate = LocalDate.parse(topPerformanceDate, monthYearFormatter);
Run Code Online (Sandbox Code Playgroud)
java.time.format.DateTimeParseException:无法解析文本'6.2015':无法从TemporalAccessor获取LocalDate:{MonthOfYear = 6,Year = 2015},ISO类型为java.time.format.Parsed的ISO
该文档北京时间不太清楚,我在短短的一个月的格式.
编辑:我想问题是每月缺少的一天?
如何用PathBuilder替换下面使用生成的Q*类和java反射的方法?
// member vars:
T operand; // can be a BigDecimal or a String
String tableName;
String fieldName;
String methodName;
public Predicate asPredicate()
{
Class<?> tableClazz = Class.forName("foo.bar.database.model.Q"+ WordUtils.capitalize(tableName));
Object tableObj = tableClazz.getConstructor(String.class).newInstance(tableName +"1000");
Field colField = tableClazz.getDeclaredField(fieldName);
Object colObj = colField.get(tableObj);
Class classParam = Object.class;
if(methodName.matches(".*like"){
classParam = String.class;
}
// method name is one of eq, ne, like...
Method m = colObj.getClass().getMethod(methodName, classParam );
return (Predicate) m.invoke(colObj, operand);
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我建议使用PathBuilder来回答我的另一个问题/sf/ask/1068889181/)这也将删除尴尬的newInstance(tableName +"1000").
PathBuilder<?> entityPath = new PathBuilder("foo.bar.database.model.Q"+ …Run Code Online (Sandbox Code Playgroud) 如何从having子句中的subselect 引用网络列?
select distinct c.id, c.name,
(
select count(cm.id) cnt
from
company_mapping cm
where
cm.company_id_source = c.id
or
cm.company_id_target = c.id
) network
from company c
where
c.name like 'foobar%'
group by c.id, c.name
having network > 1
Run Code Online (Sandbox Code Playgroud)
ORA-00904:"NETWORK":标识符无效.如果我遗漏了最后一行,它按预期工作,但我只对网络> 1的行感兴趣.