如何使用 Tapestry 组件 t:loop 绘制钻石
对于我的 Tapestry 作业,我必须在桌子上展示一串字符串中的一颗钻石。到目前为止,这是我所拥有的:
code Index.java
public class Index
{
@Property
private Integer number;
@Property
private String [] table;
public Index() {
number = 9;
int temp = 0;
String tmp = "-";
table = new String[number * number];
if(singleCell == null)
singleCell="";
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
table[temp] = tmp;
temp++;
}
}
}
@OnEvent(component="diamond")
Object onDiamondLink() {
String swapValue = "*";
int sum = number / 2 ;
int x1 = number-1;
int sumY = number / 2;
int y1 = number+1;
int temp = x1 + sumY;
for (int i = 0; i < table.length; i++) {
table[i] = "-";
}
for (int i = 0; i < table.length; i++) {
if( i == sum) {
table[i] = swapValue;
sum = sum + x1;
}
if ( i == sumY ) {
table[i] = swapValue;
sumY = sumY + y1;
}
}
System.out.println("link diamond is activate");
return null;
}
public boolean isStartRow(){
return (myIndex%9 ==0);
}
public boolean isEndRow(){
return (myIndex%9 == 8);
}
public String getStartTR(){
return "<tr >";
}
public String getEndTR(){
return "</tr>";
}
code of index.tml:
<t:actionlink t:id="diamond" >Diamond table</t:actionlink>
<br/>
<h1>Result:</h1>
<table border="1" >
<t:loop t:source="table" t:value="singleCell" index="MyIndex">
<t:if test="startRow">
<t:outputraw value="startTR"/>
</t:if>
<td width="20px">
${singleCell}
</td>
<t:if test="endRow">
<t:outputraw value="endTR"/>
</t:if>
</t:loop>
</table>
此代码生成此输出:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- - - - - - - * -
* - - - - - * - -
- * - - - * - - -
- - * - * - - - -
我需要的正确输出是这样的:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- * - - - - - * -
- - * - - - * - -
- - - * - * - - -
- - - - * - - - -
任何想法都会有很大帮助。
For my homework for Tapestry, I have to show a diamond on table from array of strings. Here's what I have so far:
code Index.java
public class Index
{
@Property
private Integer number;
@Property
private String [] table;
public Index() {
number = 9;
int temp = 0;
String tmp = "-";
table = new String[number * number];
if(singleCell == null)
singleCell="";
for (int i = 0; i < number; i++) {
for (int j = 0; j < number; j++) {
table[temp] = tmp;
temp++;
}
}
}
@OnEvent(component="diamond")
Object onDiamondLink() {
String swapValue = "*";
int sum = number / 2 ;
int x1 = number-1;
int sumY = number / 2;
int y1 = number+1;
int temp = x1 + sumY;
for (int i = 0; i < table.length; i++) {
table[i] = "-";
}
for (int i = 0; i < table.length; i++) {
if( i == sum) {
table[i] = swapValue;
sum = sum + x1;
}
if ( i == sumY ) {
table[i] = swapValue;
sumY = sumY + y1;
}
}
System.out.println("link diamond is activate");
return null;
}
public boolean isStartRow(){
return (myIndex%9 ==0);
}
public boolean isEndRow(){
return (myIndex%9 == 8);
}
public String getStartTR(){
return "<tr >";
}
public String getEndTR(){
return "</tr>";
}
code of index.tml:
<t:actionlink t:id="diamond" >Diamond table</t:actionlink>
<br/>
<h1>Result:</h1>
<table border="1" >
<t:loop t:source="table" t:value="singleCell" index="MyIndex">
<t:if test="startRow">
<t:outputraw value="startTR"/>
</t:if>
<td width="20px">
${singleCell}
</td>
<t:if test="endRow">
<t:outputraw value="endTR"/>
</t:if>
</t:loop>
</table>
This code generates this output:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- - - - - - - * -
* - - - - - * - -
- * - - - * - - -
- - * - * - - - -
The correct output I need is this:
- - - - * - - - -
- - - * - * - - -
- - * - - - * - -
- * - - - - - * -
* - - - - - - - *
- * - - - - - * -
- - * - - - * - -
- - - * - * - - -
- - - - * - - - -
Any ideas will be great help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
想画钻石吗?试试这个算法:
更新
等一下,你想创建一个挂毯页面,绘制星号的菱形,对吗?
一种选择是使用:
您只需将该字符串设置为页面的 .java 部分。(请参阅上面的代码已更新)
您的输出需要呈现为 html,您可以只使用我们为您提供的算法并插入 html中断而不是 println()
Wanna draw a diamond? Try this algorithm:
UPDATE
Wait a second, you want to create A tapestry page, that draws that diamond of asterisk right?
One option would be using:
You just need to set that String the .java part of your page.(See the above code was updated)
Your output need to be rendered as html, you can just use the algorithms we gave you and insert html breaks instead of println()
这应该打印所需的输出:
This should print the required output :